diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P56_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..c97e494
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 10:41:51 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P76_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..723ae43
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 11:19:33 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..28bcb84
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 11:57:53 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_100C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..6a9291e
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_100C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 12:36:30 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_150C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..6ad413c
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ff_1P95_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 13:15:48 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P28_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..6ec928f
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 13:53:46 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P44_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..8b24e60
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 14:33:55 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_-40C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..15ef201
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 15:12:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_100C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..f87113a
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_100C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 15:49:08 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_150C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..ec18f0d
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_ss_1P60_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 16:26:55 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P20_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..f899c6c
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P20_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 17:05:04 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P35_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..470eb6f
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P35_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 17:42:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P44_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P44_25C.ccs.v
new file mode 100644
index 0000000..f376450
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P44_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 18:21:41 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P50_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..9653ed3
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P50_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 18:59:16 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P62_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..41a7a0a
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P62_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 19:37:15 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P68_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..0e25bdf
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P68_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 20:14:44 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_150C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..c16414c
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 20:52:06 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..60cae5f
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P80_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 21:28:46 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P89_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..dd7d882
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_1P89_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 22:06:49 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_2P10_25C.ccs.v b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..d2ac228
--- /dev/null
+++ b/12T_hs/verilog/sky130_osu_sc_12T_hs_tt_2P10_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_hs_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 22:45:05 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_hs__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_hs__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P56_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..2d708dd
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 13:31:15 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P76_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..82d52ee
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 14:09:41 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..683e119
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 14:48:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_100C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..7f52611
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_100C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 15:27:14 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_150C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..4855e2c
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ff_1P95_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 16:05:48 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P28_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..de585e5
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 16:44:30 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P44_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..917af40
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 17:21:18 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_-40C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..9a9e933
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 17:59:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_100C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..5fb60dc
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_100C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 18:38:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_150C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..90c139f
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_ss_1P60_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 19:14:47 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P20_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..0a70b95
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P20_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 19:50:34 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P35_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..647635a
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P35_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 20:27:38 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P50_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..df3acf1
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P50_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 21:06:38 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P62_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..9a89dd1
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P62_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 21:43:07 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P68_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..51c922f
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P68_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 22:20:05 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_100C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_100C.ccs.v
new file mode 100644
index 0000000..23eb283
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_100C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 22:57:06 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_150C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..1ca0560
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_150C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 23:32:52 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..5b40a8d
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P80_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Wed Feb 17 00:10:10 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P89_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..a7dd5af
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_1P89_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Wed Feb 17 00:47:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_2P10_25C.ccs.v b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..d54bd37
--- /dev/null
+++ b/12T_ls/verilog/sky130_osu_sc_12T_ls_tt_2P10_25C.ccs.v
@@ -0,0 +1,2111 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ls_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Wed Feb 17 01:24:40 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ls__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P56_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P56_-40C.ccs.v
new file mode 100644
index 0000000..832a1eb
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P56_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Mon Feb 15 23:23:39 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P76_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P76_-40C.ccs.v
new file mode 100644
index 0000000..5aa16ee
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P76_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 00:04:19 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_-40C.ccs.v
new file mode 100644
index 0000000..3da9bfe
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 00:45:12 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_100C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_100C.ccs.v
new file mode 100644
index 0000000..ef1ee5a
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_100C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 01:25:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_150C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_150C.ccs.v
new file mode 100644
index 0000000..11cc8b6
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ff_1P95_150C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 02:04:38 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P28_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P28_-40C.ccs.v
new file mode 100644
index 0000000..6f90a67
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P28_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 02:44:21 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P44_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P44_-40C.ccs.v
new file mode 100644
index 0000000..f0538d1
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P44_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 03:25:16 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_-40C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_-40C.ccs.v
new file mode 100644
index 0000000..efe00c2
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_-40C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 04:06:07 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_100C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_100C.ccs.v
new file mode 100644
index 0000000..2f0c9c2
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_100C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 04:44:57 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_150C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_150C.ccs.v
new file mode 100644
index 0000000..e0dc085
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_ss_1P60_150C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 05:25:14 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P20_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P20_25C.ccs.v
new file mode 100644
index 0000000..e6d093f
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P20_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 06:05:56 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P35_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P35_25C.ccs.v
new file mode 100644
index 0000000..5958fb2
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P35_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 06:49:04 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P44_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P44_25C.ccs.v
new file mode 100644
index 0000000..b5fd3b0
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P44_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 07:29:11 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P50_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P50_25C.ccs.v
new file mode 100644
index 0000000..b45d331
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P50_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 08:08:30 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P62_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P62_25C.ccs.v
new file mode 100644
index 0000000..20e2268
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P62_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 08:49:38 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P68_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P68_25C.ccs.v
new file mode 100644
index 0000000..230a2ea
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P68_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 09:29:37 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_100C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_100C.ccs.v
new file mode 100644
index 0000000..1847d0a
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_100C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 10:10:52 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_150C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_150C.ccs.v
new file mode 100644
index 0000000..26b287d
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_150C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 10:51:14 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_25C.ccs.v
new file mode 100644
index 0000000..9c8c0ba
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P80_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 11:31:58 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P89_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P89_25C.ccs.v
new file mode 100644
index 0000000..5f9bcbf
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_1P89_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 12:14:39 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
diff --git a/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_2P10_25C.ccs.v b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_2P10_25C.ccs.v
new file mode 100644
index 0000000..fdaaf68
--- /dev/null
+++ b/12T_ms/verilog/sky130_osu_sc_12T_ms_tt_2P10_25C.ccs.v
@@ -0,0 +1,2245 @@
+// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_12T_ms_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Tue Feb 16 12:55:17 CST 2021 for SDF version 2.1
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_1 (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addf_l (CO, CON, S, A, B, CI);
+	output CO, CON, S;
+	input A, B, CI;
+
+	// Function
+	wire A__bar, B__bar, CI__bar;
+	wire int_fwire_0, int_fwire_1, int_fwire_2;
+	wire int_fwire_3, int_fwire_4, int_fwire_5;
+	wire int_fwire_6, int_fwire_7, int_fwire_8;
+	wire int_fwire_9;
+
+	and (int_fwire_0, B, CI);
+	and (int_fwire_1, A, CI);
+	and (int_fwire_2, A, B);
+	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
+	not (CI__bar, CI);
+	not (B__bar, B);
+	and (int_fwire_3, B__bar, CI__bar);
+	not (A__bar, A);
+	and (int_fwire_4, A__bar, CI__bar);
+	and (int_fwire_5, A__bar, B__bar);
+	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
+	and (int_fwire_6, A__bar, B__bar, CI);
+	and (int_fwire_7, A__bar, B, CI__bar);
+	and (int_fwire_8, A, B__bar, CI__bar);
+	and (int_fwire_9, A, B, CI);
+	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
+
+	// Timing
+	specify
+		if ((B & ~CI))
+			(A => CO) = 0;
+		if ((~B & CI))
+			(A => CO) = 0;
+		ifnone (A => CO) = 0;
+		if ((A & ~CI))
+			(B => CO) = 0;
+		if ((~A & CI))
+			(B => CO) = 0;
+		ifnone (B => CO) = 0;
+		if ((A & ~B))
+			(CI => CO) = 0;
+		if ((~A & B))
+			(CI => CO) = 0;
+		ifnone (CI => CO) = 0;
+		if ((B & ~CI))
+			(A => CON) = 0;
+		if ((~B & CI))
+			(A => CON) = 0;
+		ifnone (A => CON) = 0;
+		if ((A & ~CI))
+			(B => CON) = 0;
+		if ((~A & CI))
+			(B => CON) = 0;
+		ifnone (B => CON) = 0;
+		if ((A & ~B))
+			(CI => CON) = 0;
+		if ((~A & B))
+			(CI => CON) = 0;
+		ifnone (CI => CON) = 0;
+		if ((B & CI))
+			(A => S) = 0;
+		if ((~B & ~CI))
+			(A => S) = 0;
+		ifnone (A => S) = 0;
+		if ((B & ~CI))
+			(A => S) = 0;
+		if ((~B & CI))
+			(A => S) = 0;
+		if ((A & CI))
+			(B => S) = 0;
+		if ((~A & ~CI))
+			(B => S) = 0;
+		ifnone (B => S) = 0;
+		if ((A & ~CI))
+			(B => S) = 0;
+		if ((~A & CI))
+			(B => S) = 0;
+		if ((A & B))
+			(CI => S) = 0;
+		if ((~A & ~B))
+			(CI => S) = 0;
+		ifnone (CI => S) = 0;
+		if ((A & ~B))
+			(CI => S) = 0;
+		if ((~A & B))
+			(CI => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_1 (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__addh 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__addh_l (CO, CON, S, A, B);
+	output CO, CON, S;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	and (CO, A, B);
+	and (CON, A, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A => CO) = 0;
+		(B => CO) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_6 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__and2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__and2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	and (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__ant (A);
+	input A;
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0, int_fwire_1;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, B0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__aoi22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__aoi22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+	wire int_fwire_2, int_fwire_3;
+
+	not (B1__bar, B1);
+	not (A1__bar, A1);
+	and (int_fwire_0, A1__bar, B1__bar);
+	not (B0__bar, B0);
+	and (int_fwire_1, A1__bar, B0__bar);
+	not (A0__bar, A0);
+	and (int_fwire_2, A0__bar, B1__bar);
+	and (int_fwire_3, A0__bar, B0__bar);
+	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		if ((A1 & ~B0 & ~B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		if ((A0 & ~B0 & ~B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & B1))
+			(B0 => Y) = 0;
+		if ((~A0 & ~A1 & B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & B0))
+			(B1 => Y) = 0;
+		if ((~A0 & ~A1 & B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__buf 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__buf_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	buf (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dff 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dff_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, xcr_0;
+
+	altos_dff_err (xcr_0, delayed_CK, delayed_D);
+	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
+	buf (Q, int_fwire_IQ);
+
+	// Timing
+	specify
+		(posedge CK => (Q+:D)) = 0;
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$width (posedge CK &&& D, 0, 0, notifier);
+		$width (negedge CK &&& D, 0, 0, notifier);
+		$width (posedge CK &&& ~D, 0, 0, notifier);
+		$width (negedge CK &&& ~D, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffnr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffnr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_clk, int_fwire_IQ, int_fwire_IQN;
+	wire int_fwire_r, xcr_0;
+
+	not (int_fwire_clk, delayed_CK);
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, int_fwire_clk, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, int_fwire_clk, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if ((CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(negedge CK => (Q+:D)) = 0;
+		if ((CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if (~CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(negedge CK => (QN-:D)) = 0;
+		$setuphold (negedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (negedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, negedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, negedge CK, 0, notifier);
+		$hold (negedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (negedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_1 (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffr_l (Q, QN, D, RN, CK);
+	output Q, QN;
+	input D, RN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire xcr_0;
+
+	not (int_fwire_r, RN);
+	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
+	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, RN);
+	not (D__bar, D);
+	and (adacond1, D__bar, RN);
+
+	specify
+		if (CK)
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$width (negedge RN &&& CK, 0, 0, notifier);
+		$width (negedge RN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_1 (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffs 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffs_l (Q, QN, D, SN, CK);
+	output Q, QN;
+	input D, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
+	wire xcr_0;
+
+	not (int_fwire_s, SN);
+	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
+	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, D, SN);
+	not (D__bar, D);
+	and (adacond1, D__bar, SN);
+
+	specify
+		if (CK)
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if (CK)
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge SN &&& CK, 0, 0, notifier);
+		$width (negedge SN &&& ~CK, 0, 0, notifier);
+		$width (posedge CK &&& adacond0, 0, 0, notifier);
+		$width (negedge CK &&& adacond0, 0, 0, notifier);
+		$width (posedge CK &&& adacond1, 0, 0, notifier);
+		$width (negedge CK &&& adacond1, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__dffsr 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
+	output Q, QN;
+	input D, RN, SN, CK;
+	reg notifier;
+	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
+
+	// Function
+	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
+	wire int_fwire_s, xcr_0;
+
+	not (int_fwire_s, delayed_SN);
+	not (int_fwire_r, delayed_RN);
+	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
+	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
+	buf (Q, int_fwire_IQ);
+	not (int_fwire_IQN, int_fwire_IQ);
+	buf (QN, int_fwire_IQN);
+
+	// Timing
+
+	// Additional timing wires
+	wire adacond0, adacond1, adacond2;
+	wire adacond3, adacond4, adacond5;
+	wire adacond6, adacond7, adacond8;
+	wire CK__bar, D__bar;
+
+
+	// Additional timing gates
+	and (adacond0, RN, SN);
+	and (adacond1, D, SN);
+	and (adacond2, CK, SN);
+	not (CK__bar, CK);
+	and (adacond3, CK__bar, SN);
+	not (D__bar, D);
+	and (adacond4, D__bar, RN);
+	and (adacond5, CK, RN);
+	and (adacond6, CK__bar, RN);
+	and (adacond7, D, RN, SN);
+	and (adacond8, D__bar, RN, SN);
+
+	specify
+		if ((CK & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (Q+:1'b0)) = 0;
+		ifnone (negedge RN => (Q+:1'b0)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (Q+:1'b1)) = 0;
+		ifnone (posedge RN => (Q+:1'b1)) = 0;
+		if ((CK & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (Q+:1'b1)) = 0;
+		ifnone (negedge SN => (Q+:1'b1)) = 0;
+		(posedge CK => (Q+:D)) = 0;
+		if ((CK & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & ~SN))
+			(posedge RN => (QN-:1'b1)) = 0;
+		ifnone (posedge RN => (QN-:1'b1)) = 0;
+		if ((CK & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		if ((~CK & ~D & ~SN))
+			(negedge RN => (QN-:1'b0)) = 0;
+		ifnone (negedge RN => (QN-:1'b0)) = 0;
+		if ((CK & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		if ((~CK & ~D & RN))
+			(negedge SN => (QN-:1'b1)) = 0;
+		ifnone (negedge SN => (QN-:1'b1)) = 0;
+		(posedge CK => (QN-:D)) = 0;
+		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
+		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
+		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
+		$recovery (posedge RN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
+		$hold (posedge CK, posedge RN, 0, notifier);
+		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
+		$recovery (posedge SN, posedge CK, 0, notifier);
+		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
+		$hold (posedge CK, posedge SN, 0, notifier);
+		$width (negedge RN &&& adacond2, 0, 0, notifier);
+		$width (negedge RN &&& adacond3, 0, 0, notifier);
+		$width (negedge SN &&& adacond5, 0, 0, notifier);
+		$width (negedge SN &&& adacond6, 0, 0, notifier);
+		$width (posedge CK &&& adacond7, 0, 0, notifier);
+		$width (negedge CK &&& adacond7, 0, 0, notifier);
+		$width (posedge CK &&& adacond8, 0, 0, notifier);
+		$width (negedge CK &&& adacond8, 0, 0, notifier);
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_1 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_10 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_2 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_3 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_4 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_6 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_8 (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__inv 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__inv_l (Y, A);
+	output Y;
+	input A;
+
+	// Function
+	not (Y, A);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__mux2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__mux2_1 (Y, A0, A1, S0);
+	output Y;
+	input A0, A1, S0;
+
+	// Function
+	wire int_fwire_0, int_fwire_1, S0__bar;
+
+	and (int_fwire_0, A1, S0);
+	not (S0__bar, S0);
+	and (int_fwire_1, A0, S0__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((~A0 & A1))
+			(S0 => Y) = 0;
+		if ((A0 & ~A1))
+			(S0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nand2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nand2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	or (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__nor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__nor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (Y, A__bar, B__bar);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai21 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai21_l (Y, A0, A1, B0);
+	output Y;
+	input A0, A1, B0;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire int_fwire_0;
+
+	not (B0__bar, B0);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_0, A0__bar, A1__bar);
+	or (Y, int_fwire_0, B0__bar);
+
+	// Timing
+	specify
+		(A0 => Y) = 0;
+		(A1 => Y) = 0;
+		if ((A0 & A1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__oai22 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__oai22_l (Y, A0, A1, B0, B1);
+	output Y;
+	input A0, A1, B0, B1;
+
+	// Function
+	wire A0__bar, A1__bar, B0__bar;
+	wire B1__bar, int_fwire_0, int_fwire_1;
+
+	not (B1__bar, B1);
+	not (B0__bar, B0);
+	and (int_fwire_0, B0__bar, B1__bar);
+	not (A1__bar, A1);
+	not (A0__bar, A0);
+	and (int_fwire_1, A0__bar, A1__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if ((~A1 & B0 & B1))
+			(A0 => Y) = 0;
+		if ((~A1 & B0 & ~B1))
+			(A0 => Y) = 0;
+		if ((~A1 & ~B0 & B1))
+			(A0 => Y) = 0;
+		ifnone (A0 => Y) = 0;
+		if ((~A0 & B0 & B1))
+			(A1 => Y) = 0;
+		if ((~A0 & B0 & ~B1))
+			(A1 => Y) = 0;
+		if ((~A0 & ~B0 & B1))
+			(A1 => Y) = 0;
+		ifnone (A1 => Y) = 0;
+		if ((A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((A0 & ~A1 & ~B1))
+			(B0 => Y) = 0;
+		if ((~A0 & A1 & ~B1))
+			(B0 => Y) = 0;
+		ifnone (B0 => Y) = 0;
+		if ((A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((A0 & ~A1 & ~B0))
+			(B1 => Y) = 0;
+		if ((~A0 & A1 & ~B0))
+			(B1 => Y) = 0;
+		ifnone (B1 => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_1 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_2 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_4 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_8 (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__or2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__or2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	or (Y, A, B);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif1 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tiehi (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b1);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms_ 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tielo (Y);
+	output Y;
+
+	// Function
+	buf (Y, 1'b0);
+
+	// Timing
+	specify
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_1 (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__tnbufi 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__tnbufi_l (Y, A, OE);
+	output Y;
+	input A, OE;
+
+	// Function
+	notif0 (Y, A, OE);
+
+	// Timing
+	specify
+		(A => Y) = 0;
+		(OE => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xnor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xnor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (B__bar, B);
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B__bar);
+	and (int_fwire_1, A, B);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (B)
+			(A => Y) = 0;
+		if (~B)
+			(A => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_12T_ms__xor2 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_12T_ms__xor2_l (Y, A, B);
+	output Y;
+	input A, B;
+
+	// Function
+	wire A__bar, B__bar, int_fwire_0;
+	wire int_fwire_1;
+
+	not (A__bar, A);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (Y, int_fwire_1, int_fwire_0);
+
+	// Timing
+	specify
+		if (~B)
+			(A => Y) = 0;
+		if (B)
+			(A => Y) = 0;
+		if (~A)
+			(B => Y) = 0;
+		if (A)
+			(B => Y) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+
+`ifdef _udp_def_altos_latch_
+`else
+`define _udp_def_altos_latch_
+primitive altos_latch (q, v, clk, d);
+	output q;
+	reg q;
+	input v, clk, d;
+
+	table
+		* ? ? : ? : x;
+		? 1 0 : ? : 0;
+		? 1 1 : ? : 1;
+		? x 0 : 0 : -;
+		? x 1 : 1 : -;
+		? 0 ? : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_err_
+`else
+`define _udp_def_altos_dff_err_
+primitive altos_dff_err (q, clk, d);
+	output q;
+	reg q;
+	input clk, d;
+
+	table
+		(0x) ? : ? : 0;
+		(1x) ? : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_
+`else
+`define _udp_def_altos_dff_
+primitive altos_dff (q, v, clk, d, xcr);
+	output q;
+	reg q;
+	input v, clk, d, xcr;
+
+	table
+		*  ?   ? ? : ? : x;
+		? (x1) 0 0 : ? : 0;
+		? (x1) 1 0 : ? : 1;
+		? (x1) 0 1 : 0 : 0;
+		? (x1) 1 1 : 1 : 1;
+		? (x1) ? x : ? : -;
+		? (bx) 0 ? : 0 : -;
+		? (bx) 1 ? : 1 : -;
+		? (x0) b ? : ? : -;
+		? (x0) ? x : ? : -;
+		? (01) 0 ? : ? : 0;
+		? (01) 1 ? : ? : 1;
+		? (10) ? ? : ? : -;
+		?  b   * ? : ? : -;
+		?  ?   ? * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_err_
+`else
+`define _udp_def_altos_dff_r_err_
+primitive altos_dff_r_err (q, clk, d, r);
+	output q;
+	reg q;
+	input clk, d, r;
+
+	table
+		 ?   0 (0x) : ? : -;
+		 ?   0 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 0  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 0  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_r_
+`else
+`define _udp_def_altos_dff_r_
+primitive altos_dff_r (q, v, clk, d, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, r, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 0;
+		?  b   ? (1?) ? : 0 : -;
+		?  x   0 (1?) ? : 0 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 0 : -;
+		? (x1) 0  ?   0 : ? : 0;
+		? (x1) 1  0   0 : ? : 1;
+		? (x1) 0  ?   1 : 0 : 0;
+		? (x1) 1  0   1 : 1 : 1;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 0  ?   ? : 0 : -;
+		? (bx) 1  0   ? : 1 : -;
+		? (x0) 0  ?   ? : ? : -;
+		? (x0) 1  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 0  ?   ? : ? : 0;
+		? (01) 1  0   ? : ? : 1;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_err_
+`else
+`define _udp_def_altos_dff_s_err_
+primitive altos_dff_s_err (q, clk, d, s);
+	output q;
+	reg q;
+	input clk, d, s;
+
+	table
+		 ?   1 (0x) : ? : -;
+		 ?   1 (x0) : ? : -;
+		(0x) ?  0   : ? : 0;
+		(0x) 1  x   : ? : 0;
+		(1x) ?  0   : ? : 1;
+		(1x) 1  x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_s_
+`else
+`define _udp_def_altos_dff_s_
+primitive altos_dff_s (q, v, clk, d, s, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, xcr;
+
+	table
+		*  ?   ?  ?   ? : ? : x;
+		?  ?   ?  1   ? : ? : 1;
+		?  b   ? (1?) ? : 1 : -;
+		?  x   1 (1?) ? : 1 : -;
+		?  ?   ? (10) ? : ? : -;
+		?  ?   ? (x0) ? : ? : -;
+		?  ?   ? (0x) ? : 1 : -;
+		? (x1) 0  0   0 : ? : 0;
+		? (x1) 1  ?   0 : ? : 1;
+		? (x1) 1  ?   1 : 1 : 1;
+		? (x1) 0  0   1 : 0 : 0;
+		? (x1) ?  ?   x : ? : -;
+		? (bx) 1  ?   ? : 1 : -;
+		? (bx) 0  0   ? : 0 : -;
+		? (x0) 1  ?   ? : ? : -;
+		? (x0) 0  0   ? : ? : -;
+		? (x0) ?  0   x : ? : -;
+		? (01) 1  ?   ? : ? : 1;
+		? (01) 0  0   ? : ? : 0;
+		? (10) ?  ?   ? : ? : -;
+		?  b   *  ?   ? : ? : -;
+		?  ?   ?  ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_err_
+`else
+`define _udp_def_altos_dff_sr_err_
+primitive altos_dff_sr_err (q, clk, d, s, r);
+	output q;
+	reg q;
+	input clk, d, s, r;
+
+	table
+		 ?   1 (0x)  ?   : ? : -;
+		 ?   0  ?   (0x) : ? : -;
+		 ?   0  ?   (x0) : ? : -;
+		(0x) ?  0    0   : ? : 0;
+		(0x) 1  x    0   : ? : 0;
+		(0x) 0  0    x   : ? : 0;
+		(1x) ?  0    0   : ? : 1;
+		(1x) 1  x    0   : ? : 1;
+		(1x) 0  0    x   : ? : 1;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_0
+`else
+`define _udp_def_altos_dff_sr_0
+primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   ?   1   ? : ? : 0;
+		?  ?   ?   1   0   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_dff_sr_1
+`else
+`define _udp_def_altos_dff_sr_1
+primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
+	output q;
+	reg q;
+	input v, clk, d, s, r, xcr;
+
+	table
+	//	v,  clk, d, s, r : q' : q;
+
+		*  ?   ?   ?   ?   ? : ? : x;
+		?  ?   ?   0   1   ? : ? : 0;
+		?  ?   ?   1   ?   ? : ? : 1;
+		?  b   ? (1?)  0   ? : 1 : -;
+		?  x   1 (1?)  0   ? : 1 : -;
+		?  ?   ? (10)  0   ? : ? : -;
+		?  ?   ? (x0)  0   ? : ? : -;
+		?  ?   ? (0x)  0   ? : 1 : -;
+		?  b   ?  0   (1?) ? : 0 : -;
+		?  x   0  0   (1?) ? : 0 : -;
+		?  ?   ?  0   (10) ? : ? : -;
+		?  ?   ?  0   (x0) ? : ? : -;
+		?  ?   ?  0   (0x) ? : 0 : -;
+		? (x1) 0  0    ?   0 : ? : 0;
+		? (x1) 1  ?    0   0 : ? : 1;
+		? (x1) 0  0    ?   1 : 0 : 0;
+		? (x1) 1  ?    0   1 : 1 : 1;
+		? (x1) ?  ?    0   x : ? : -;
+		? (x1) ?  0    ?   x : ? : -;
+		? (1x) 0  0    ?   ? : 0 : -;
+		? (1x) 1  ?    0   ? : 1 : -;
+		? (x0) 0  0    ?   ? : ? : -;
+		? (x0) 1  ?    0   ? : ? : -;
+		? (x0) ?  0    0   x : ? : -;
+		? (0x) 0  0    ?   ? : 0 : -;
+		? (0x) 1  ?    0   ? : 1 : -;
+		? (01) 0  0    ?   ? : ? : 0;
+		? (01) 1  ?    0   ? : ? : 1;
+		? (10) ?  0    ?   ? : ? : -;
+		? (10) ?  ?    0   ? : ? : -;
+		?  b   *  0    ?   ? : ? : -;
+		?  b   *  ?    0   ? : ? : -;
+		?  ?   ?  ?    ?   * : ? : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_r_
+`else
+`define _udp_def_altos_latch_r_
+primitive altos_latch_r (q, v, clk, d, r);
+	output q;
+	reg q;
+	input v, clk, d, r;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 0;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 0 : -;
+		? 1 0 0 : ? : 0;
+		? 1 0 x : ? : 0;
+		? 1 1 0 : ? : 1;
+		? x 0 0 : 0 : -;
+		? x 0 x : 0 : -;
+		? x 1 0 : 1 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_s_
+`else
+`define _udp_def_altos_latch_s_
+primitive altos_latch_s (q, v, clk, d, s);
+	output q;
+	reg q;
+	input v, clk, d, s;
+
+	table
+		* ? ? ? : ? : x;
+		? ? ? 1 : ? : 1;
+		? 0 ? 0 : ? : -;
+		? 0 ? x : 1 : -;
+		? 1 1 0 : ? : 1;
+		? 1 1 x : ? : 1;
+		? 1 0 0 : ? : 0;
+		? x 1 0 : 1 : -;
+		? x 1 x : 1 : -;
+		? x 0 0 : 0 : -;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_0
+`else
+`define _udp_def_altos_latch_sr_0
+primitive altos_latch_sr_0 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 0 : ? : 1;
+		? ? ? ? 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
+
+`ifdef _udp_def_altos_latch_sr_1
+`else
+`define _udp_def_altos_latch_sr_1
+primitive altos_latch_sr_1 (q, v, clk, d, s, r);
+	output q;
+	reg q;
+	input v, clk, d, s, r;
+
+	table
+		* ? ? ? ? : ? : x;
+		? 1 1 ? 0 : ? : 1;
+		? 1 0 0 ? : ? : 0;
+		? ? ? 1 ? : ? : 1;
+		? ? ? 0 1 : ? : 0;
+		? 0 * ? ? : ? : -;
+		? 0 ? * 0 : 1 : 1;
+		? 0 ? 0 * : 0 : 0;
+		? * 1 ? 0 : 1 : 1;
+		? * 0 0 ? : 0 : 0;
+		? ? 1 * 0 : 1 : 1;
+		? ? 0 0 * : 0 : 0;
+	endtable
+endprimitive
+`endif
