NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$$$$$$$$$$$$$$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$$$$$$$$$$$$$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FFFFVVVVVVVVVVVVVVVVVVFFFFMMMM$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$MMMFFFFVVVVVVVVVVVVVVVVVVFFFF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$MVVVVVVVVIIIIIIIIIIIIIIIIIIIV$$$$VFMM$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$$MFVFN$$VIIIIIIIIIIIIIIIIIIIVVVVVVVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVVVVIIIIIIIIIIIIIIIIIIIIMMFVIIIIVVVFM$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$MFVVVIIIIVFMMVIIIIIIIIIIIIIIIIIIIVVVVVVM$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVVIIIIIIIIIIIIIIIIIII$$$FIIIIIIIIIIIVFM$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$MFVVIIIIIIIIIIV$$$VIIIIIIIIIIIIIIIIIVVVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$MVVVIIIIIIIIIIIIIIIIF$$VIIIIIIIIIIIIIIVVF$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVIIIIIIIIIIIIIIV$$MIIIIIIIIIIIIIIIIVVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVIIIIIIIIIIIIIVFMVIIIIIIIIIIIIIIIIIVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVIIIIIIIIIIIIIIIIIIFFFIIIIIIIIIIIIIVVF$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$MVVVIIIIIIIIV$FIIIIIIIIIIIIIIIIVVVIVVVM$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VVVIVVVIIIIIIIIIIIIIIIIVMVIIIIIIIIVVVF$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$MFVVVVVFVIIIIIIIIIIIIIIIIVVVVVVVVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$MVVVVVVVVVIIIIIIIIIIIIIIIIVFVVVVVFF$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$$$MFFFVVVVVVVVVVVVVVVVVVVVVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVVVVVVVVVVVVVVVVVVVVFFFMM$$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNN$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$NNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNV*VNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNF*VNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNI:*IMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFI*:*NNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNN$*FMVVVMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVVMF*MNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNV*NNNNN$NNNN$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$NNNNNIINNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNIINNNNNNNNN$I*V$N$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMVVVI:FNNNNNNNNNFINNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNIVNNNNNNNNNV:INNMI*VF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VI.VNNNM$NNNNNNNN$I$NNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNIVNNNNNNNNN*:NNNV.INNNNNVVVFNFVF$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$NNFVI*IVI*I$NNNNNV.VNNVNNNNNNNNNNIMNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNVVNNNNNNNNV.$NN$:*NNNNNNFNNNNF:*VVVVIIVNN$*VNN$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$MFFN$VIIIIIII*::FN$$I.INNV:*$NNNNV.VNVVNNNNNNNN$IMNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNMI$NNNNNN$:VNNM*:MNNNN$NNNNNF:INNNNM:INNI.:$NFV:.II**FNNNNNMII*IIIIIIIFNNNNNNNNNNNNNINNNNNNNVIIIII$NNNNNNVIIIIVNNNNNNNNNNNFIIIVNNNNNNMIIIVNNNNNNNNI$NNNNNNNVIIIIIIIFNNNNNNNNNNNNMII*:IIFN$VI.*F$NNN$::$NNNNV:FNNNI.INNN*:MNNNNV.VV:VNNNNNNNMI$NNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNVVNNNNNNI*N$VI.VNNNNNNNNNNV.VNNNNNIINNV**FNNN*.FNN*:MNNNNNNV.*NNN$I:INNNNNNNNNNNN$*$NNNNNN$F*:VMNNNNNNNMV::F$NNNNNNNNNNN$FI.:$NNNNNI.:FMNNNNNNNN*FNNNNNNN$F*.I$$V**MNNNNNNNNNNNN$::FNNNNN$.*NNNNN$::$NNNNNIFNNNI.INNN:INNNNNV.*I*VNVNNNNFVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMV$NNNNV:$VNF:INNN$NNNNNNI.FNNN$NVVNNNNI$NN$::$NNV.*NNNNNNV.*NNNNNIINNNNNNNNNNNNV:FNNNNNNNN*:FNNNNNNNNNN*:NNNNNNNNNNNNNNNV:.VNNNNNV::$NNNNNNNN$:VNNNNNNNNN*.VNNNNI:VNNNNNNNNNNN$::FNNNNN$.*NNNNN$::$NNNMNNNNNNI.INNV*$NNNNNV.VN$$FINNN$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$$NNN$:I$NN:*NN$NNNNNNN*.$NNVVNNNNNNFVNNN$::$NNV.:$NNNNNV.*NNNNNMINNNNNNNNNNNNI.VNNNNNNNN*.VNNNNNNNNNN*:NNNNNNNNNNNNNNNF*.INNNNNV::$NNNNNNNNM:INNNNNNNNN*.VNNNNNI:VNNNNNNNNNN$::FNNNNN$.*NNNNN$::$NNVINNNNNNI.INMI$NNNNNNV.VNNNI*NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN:FNNN*:$MMNNNNNNN*:$NM*FNNNNNFFNNNNM:*NNNV.:$NNNNNV.*NNNNNNVNNNNNNNNNNNNV:INNNNNNNN*.VNNNNNNNNNN*.NNNNNNNNNNNNNNNMI:*NNNNNV*:MNNNNNNNN$**NNNNNNNNN*.VNNNNN$::$NNNNNNNNN$::FNNNNN$.*NNNNN$::$NNIINNNNNNI.*II*INNNNNNV.VNNF:VNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$NNNNI.VVNNNNNNN$::VI::$NNNNNNNNNNNF.*NNNI.INNNNNNV.INNNV$NNNNNNNNNNNNNN$IINNNNNNNN*.VNNNNNNNNNN*.NNNNNNNNNNNNNNN$V*:$NNNNF*.FNNNNNNNNVV:NNNNNNNNN*.VNNNNNNI.VNNNNNNNNN$::FNNNNN$.*NNNNN$::$NV:INNNNNNI.INN$*:VNNNNV.IN$IFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNV.*$NNNNNNNM:*NNV*NNNNNNNNNNNNV.INN$:*$NNNNNNV.INNNI$NNNNNNNNNNNNNNNV*NNNNNNNN*.VNNNNNNNNNN*.NNNNNNNNNNNNNNN$VI.VNNN$V*.VNNNNNNNNV$:NNNNNNNNN*.VNNNNNNV.*NNNNNNNNN$::FNNNNN$.*NNNNN$::*I:.INNNNNNI.INNNV.*NNNNF:IVINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNF:VNNNNNNNNV.*NNNINNNNNNNNNNNNV.*VI*VNNNNNNNNV.INNV:$NNNNNNNNNNNNN$NN*NNNNNNNN*.VNNNNNNNNNN*.$NNNNNNNNNNNNNNNVV.INNNMV*.VNNNNNNNMVN*MNNNNNNNN*.VNNNNNNV.*NNNNNNNNN$::FNNNNN$.*NNNNN$::MNM:INNNNNNI.INNN$:*NNNNF:*FNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$NNNNNNNNNV.INNNFNNNNNNNNNNNNV.INNV*VNNNNNNNV.*I*::$NNNNNNNNNNNNN$NNIMNNNNNNN*.VNNNNNNNNNNI.$NNNNNNNNNNNNNNNVM::NNNFFI.INNNNNNNVVNVVNNNNNNNN*.VNNNNNNV.*NNNNNNNNNM:.*IIIII*.*NNNNN$::$NNVINNNNNNV.INNNN*:F$$VV$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNI.INNNNNNN$NNNNNNNNV.INNNI:VNNNNNNF:INNI:MNNNNNNNNNNNNN$NNIVNNNNNNN*.VNNNNNNNNNNI.$NNNNNNNNNNNNNNNVN*.NNNVMI.INNNNNNNVVNMINNNNNNNN*.VNNNNNNV.*NNNNNNNNNM::V$NNNN$.*NNNNN$::$NNN$NNV$NNV.INNNNV.*VNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$NI.INNNNNNVVNNNNNNNNV.*NNN$::$NNNNNM:*NN$*FNNNNNNNNNNNNN$NNIINNNNNNN*.VNNNNNNNNNNI.$NNNNNNNNNNNNNNNVNI.FNNV$I.INNNNNNNV$NN*NNNNNNNN*.VNNNNNNV.*NNNNNNNNNM::MNNNNN$.*NNNNN$::$NNNNNN*$NNV.INNNNNVVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VI:INNNNNNIVNNNNNNNNV.*NNNN*.VNNNNN$:*NNNIVNNNNNNNNNNNN$NNNVINNNNNNN*.VNNNNNNNNNNI.$NNNNNNNNNNNNNNNVNI.INNVNV.INNNNNNNVNNN:FNNNNNNN*.VNNNNNNV.*NNNNNNNNNM::MNNNNNM.*NNNNN$::$NNNNNV:$NNV.*IVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VVVMNNI:VNNNNNNNNF.*NNNNI.INNNNN$::NNNVVNNNNNNNNNNNNF*****NNNNNNN*.FNNNNNNNNNNI.$NNNNNNNNNNNNNNNVNV.*NNVNV.*NNNNNNNVIII:VNNNNNNN*.VNNNNNNV.INNNNNNNNNM::$NNNNNM.*NNNNN$::$NNNN$::$$IIIVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFV*:.VNNNNNNNNF::$NNNV.*NNNNNN::$NN$VNNNNNNNNNNNNNNN$V*$NNNNNN*:FNNNNNNNNNNI.$NNNNNNNNNNNNNNNVN$::$NVNV.*NNNNNNNVVVV**NNNNNNN*.VNNNNNNI.INNNNNNNNNF::$NNNNNM.*NNNNN$::MNNNF*:*$$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$V$NNNNNNNNM::$NNNV.:$NNNNN*:FNNNNNN$NNNNNNNNNNNNN$:MNNNNNN*:MNNNNNNNNNNI.$NNNNNNNNNNNNNNNV$N*.VNVNF.*NNNNNNNFNNNI:NNNNNNN*.VNNNNNN*.VNNNNNNNNNF.:$NNNNNF.*NNNNN$::IIIIIV$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VF:.FNNNN::FNNNNN*.VNNNNNNVNNNNNNNNN$NNNN:VNNNNNN*:$NNNNNNNNNNI.$NNNNNNNNNNNNNNNV$NI.I$VNM:*NNNNNNNMNNNV.VNNNNNN*.VNNNNNN*:NNNNNNNNNNV.:$NNNNNF.*N$NMIIIV$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VI*IFNNNI.INNNNNI.INNNNNNVNNNNNNNN$$NNNN*INNNNNN::$NNNNNNNNNN*.$NNNNNNNNNNNNNNNVMNV.*MVN$::$NNNNN$$NNNF:INNNNNN*.VNNNNNF:*NNNNNNNNNNV.:NNNNNMI:*IVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNV$NN$:*NNNNNI.INNNNNNINNNNNNNN$$NNNN*INNNNN$::$NNNNNNNNNN*.$NNNNNNNNNNNNNNNVMNF.:VVN$::$NNNNN$$NNN$:*NNNNNN*.VNNNNNI.VNNNNNNNNNNV.:VV$NFVFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$IIVNNNV.*NNNNNM*NNNNNNNNMNNNNN**NNNNN$::NNNNNNNMNNN*.$NNNNNN$NNNNNNNNVFN$.:IVNN::MNNNNNNNNNNN*:$NNNNN*.VNNNNN**NNNNNNNNN$VI*IVFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMVI.*NNNNNI:$NNNNNNNMNNNNN*:NNNNNM:*NNNNNNNVNNN*.$NNNNNNV$NNNNNNNVFNN:.*MNN*:FNNNNNNNNNNNI.VNNNNN*.VNNNNF:VNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMVVVV$$::MNNNNNNNFNNNNNI:$NNNNV.*NNNNNN$VNNN*.NNNNNNNVNNNNNNNNVFNN:.*$NN*.VNNNNN$NNNNNI.INNNNN*.FNNNN*INNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMV*:.VNNNNNNNFNNNNNI.FNNNNV.*NNNNNNVINNN*.NNNNNNNINNNNNNNNVFNN*.*NNN*.VNNNNN$NNNNNV.*NNNNN*:FNNNI*NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNV$NNNNNNMFNNNNNI.VNNNNV.INNNNNNIVNNN*.NNNNNNNINNNNNNNNVVNNI.*NNN*.VNNNNNMNNNNN$::NNNNN*:FN$IINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNV.INNNNI.INNNNNN*VNNN::NNNNNN$INNNNNNNNFVNNI.*NNN*.VNNNNNMNNNNNN*:FNNNN*.IIIFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNV*FNNNNNV.INNNNI.INNNNNN*VNN$::NNNNNNV*NNNNNNNNFVNNV.INNNI.INNNNNFNNNNNN*.VNNNV*IVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFIVNNNNV.INNNNI.VNNNNNF:MNN$::NNNNNNI*NNNNNNNNFVNNF:INNNI.INNNN$VNNNNNNI.I$NIV$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNV.*NNNN*.VNNNNNI:$NNM::NNNNNNI*NNNNNNNNFVNN$:INNNI.INNNN$VNNNNNNI.:I$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNI*.*NNNN*.VNNNNN*:$NNF::NNNNNN**NNNNNNNNFVNNN*VNNNI.INNNNFVNNNN$**I$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMI*IN$N*:FNNNNV:*NNNV.*NNNNNV:*NNNNNNNNMVNNN*VNNNI.INNNNFVF$NN$$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNI*::IFNNF:.*NNNV.*NNNNN*.INNNNNNNNMVNNNIMNNNI.*$FNI**I$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$VI*:::..*NNNV.*NNNNV:.INNNNNNNNMVNNNV$NFI*.:*INMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMVIIVNI*:.:IIII:..INNNNNN$II**VN$NNVIVFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN$FVVIII****VNNNNNNFIIVV$NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
    

index - writeups - articles - tags - archives - talks - links - rss

Seccon 2020 - This Is RSA [EN]

This is RSA

This was a warmup crypto challenge at Seccon CTF 2020. We are given a script, rsa.rb, containing the following ruby code:

require 'openssl'

def get_prime
  i = OpenSSL::BN.rand(512).to_s.unpack1('H*').hex
  OpenSSL::BN.new(i).prime? ? i : get_prime
end

p = get_prime
q = get_prime
n = p * q
e = 65537
m = File.read('flag.txt').unpack1('H*').hex
c = m.pow(e, n)

puts "N = #{n}"
puts "c = #{c}"

We are also given a trace of execution.

N = 13234306273608973531555502334446720401597326792644624514228362685813698571322410829494757436628326246629203126562441757712029708148508660279739210512110734001019285095467352938553972438629039005820507697493315650840705745518918873979766056584458077636454673830866061550714002346318865318536544606580475852690351622415519854730947773248376978689711597597169469401661488756669849772658771813742926651925442468141895198767553183304485662688033274567173210826233405235701905642383704395846192587563843422713499468379304400363773291993404144432403315463931374682824546730098380872658106314368520370995385913965019067624762624652495458399359096083188938802975032297056646831904294336374652136926975731836556951432035301855715375295216481079863945383657
c = 9094564357254217771457579638296343398667095069849711922513911147179424647045593821415928967849073271368133854458732106409023539482401316282328817488781771665657515880026432487444729168909088425021111879152492812216384426360971681055941907554538267523250780508925995498013624610554177330113234686073838491261974164065812534037687990653834520243512128393881497418722817552604416319729143988970277812550536939775865310487081108925130229024749287074763499871216498398695877450736179371920963283041212502898938555288461797406895266037211533065670904218278235604002573401193114111627382958428536968266964975362791704067660270952933411608299947663325963289383426020609754934510085150774508301734516652467839087341415815719569669955613063226205647580528

As i'm not really familiar with Ruby, it took me way too long to notice that the get_prime function does some strange string and hex conversions. In fact, one can translates it to the following equivalent python code:

def get_prime():
    i = int.from_bytes(str(random.getrandbits(512)).encode(), byteorder='big')
    if is_prime(i):
        return i
    else:
        return get_prime()

That means that the primes generated by the function can be converted from long to bytes, and the bytes decoded to a string that will represent a valid decimal integer.

More formally, the primes are of the form \(p = \sum\limits_{i = 0}^{l} p_i \times 16^{2i}\), with \(l = \lceil \log_{10} 2^{512} \rceil = 155\) and where each \(p_i\) is the ascii code of a digit, ie \(p_i \in \{48,..,57\}\).

By writing \(p \times q = (\sum\limits_{i = 0}^{l} p_i \times b^i) \times (\sum\limits_{i = 0}^{l} q_i \times b^i) = \sum\limits_{i = 0}^{2l} n_i \times b^i\) in base \(b = 16^2\), the factorisation is relatively easy to do.

One can notice that as for \(i \in \{0,..,l\}, n_i = \sum\limits_{k = 0}^i p_k \times q_{i - k}\) and as each \(p_i,q_i\) can have only ten different values, its easy to iteratively guess the values of \(p_i\) and \(q_i\) by checking for the equality.

Here is a sage script that implements that idea:

n = [...]
c = [...]
e = 65537
b = 16**2

P = PolynomialRing(ZZ, 'x')
ni = Integer(n).digits(b)

def get_coeff(pc, qc, deg):

    ni_wanted = ni[deg]

    for pi in range(0x30,0x3a):
        for qi in range(0x30,0x3a):

            p1 = P(pc + [pi])
            p2 = P(qc + [qi])

            ni_guess = (p1*p2)(b).digits(b)[deg]

            if ni_guess == ni_wanted:
                pc = pc + [pi]
                qc = qc + [qi]
                return pc,qc


pc,qc = [],[] # list of p and q coeffs
for deg in range(155):
    pc,qc = get_coeff(pc, qc, deg)

p = sum(x*b**i for i,x in enumerate(pc))
q = sum(x*b**i for i,x in enumerate(qc))

print(n == p*q)
phi = (p-1)*(q-1)
d = inverse_mod(e, phi)

from Crypto.Util.number import long_to_bytes
print(long_to_bytes(int(pow(c,d,n))).decode())

Executing it yields

True
SECCON{I_would_always_love_the_cryptography_and_I_know_RSA_never_gets_old_So_Im_always_a_fan_of_this_mathematical_magic_and...Wait_This_flag_can_be_longer_than_I_expected_What_happened?}

This is probably not the best algorithm to factor in this case, but hey this is CTF code and it works ^^