MZ@ !L!This program cannot be run in DOS mode. $9yWyWyW$TyW$SyWyVxW$VyW$RyW$WyW$^yW$yW$UyWRichyWPEdU[" 0 @`APR W0 D 8RS K .textZ `.rdatajef@@.data@6\@.pdataDF@@.didat @.rsrc0 @@.reloc  @BH(3H DB(%HH%H %H%H>f d8H IHD FH H(zH1HoH;HoHEHoHWHoHaHoHkHoHuHoHHoHHoHɉHpHӉHpHHpHHpHHpHaHpHkHpHuHpHHpH!HZoH+HToH5HNoHHHoHHBoHHtHLH?Hةur=tkBAHz0tLB(H4HB ELJHRHfDt$0HD$(fDt$ ?H؅t,t=tHH\$PHt$XH|$`H@A^HlDJDB>H^ةu=t3HHXHhHp HPWATAUAVAWH@E3IHAAAMfE98LqM9>tCHMH=>HAA;IIHfD9|]uHHL$xHI@H:HHu fD8DIHD$xfD|$8LHD$03D$xfD$(Ht$ =H0Au3ۃ~t2HuH^H[HtHK3HtH3H@(%03HK+HNH\$0Ht$8H _H\$Hl$Ht$WAVAWH HE3DHǺEtu @ LHHHfE9HHGH@H臛HHuXDHH蘷^LH\$ LIHHy 荫-HH>؅tDHHLǹEAH蠓Hl$HH\$@Ht$PH|$XH0A^@SH HYALHKAQp[&Hu=t3H [ËH [H\$Hl$Ht$WAVAWH HLAE3LHHAA%$HHu#5HH$HHϋ $HtH$HAHAEDžuHuCDHLI!H\$@Hl$HHt$PH A_A^_H\$Hl$Ht$WAVAWH 3IHLLHI;Džt{titH< HRH,OuH;t ; wHH&HrRMHIοxuR9H< u03,< t#< t~< ~< t,Gu LHH;JLHI"H\$@Hl$HHt$PH A_A^_HHXHhHpHx AVH0IHL+u3tOHHH)H@Hi3HHuX@|$(DLHD$ 33 "u!HIfF0H貐Hl$HH\$@Ht$PH|$XH0A^H\$Hl$Ht$ WH HHH՗3HD$@HHt]HkHwHHeHkHkHk Hk(H0H8H@HH`HhpHXHHu{HHHWH@'uRHKD@H{"Hu=u9ptHK^"H4HHH6'H\$0Hl$8Ht$HH _3x!~! tu ø øH\$WH HyHFHHtHGHHXގH_HuHggH\$0H _H\$E3HBH=EӻWDGExMIvDDEHt+L+L+IHtAft fHHuHuHAzHtfDH\$ALD$LL$ SUVWH(3HBH=HWGx5HZHHLL$h#xHH;wuf,^f,^zHtf.H(_^][3H\$H|$3HBH=LDϺWDGILEx*IDMtf99t HHuHtML+DLExRIK CDI+t6HI+MLH+Mt ftfIHHuHu HAzf9H\$AH|$H\$3HBADI;AWEGEx?DHt+L+L+IHtAft fHHuHuHAzHtfH\$AHl$Ht$WH H;u}H5IHt(H=IH5tHF@@#HvHH>uH5iHj HHtHB@@#HLHH;rH H=QHt3+HO Ht HH@t#HG@3Hg c#HHH?uH=څHۅHHtHB@35#HHH;rH 4|Hl$0Ht$8H _39tH\$Hl$Ht$WAVAWH MLHMu @I 3H[HH HH9{t9EuA9EuA9EuA 9E tHHHs H9>u9H H9>uHKH-EHCL("H HHtHMIH!I>uuMMHA2H\$@Hl$HHt$PH A_A^_H\$WH HgHtF>HC!HC8!H AH(HHH;uH݃3H ܃H;sNH;Ht9HG0!x_HG8"!HAHY(x@H HH;rx,H r)/xHHtH H H\$0H _H\$WH HgHt<4HC8 H E3H'HC3t xvHHH;uH~Ht T xVHт3H Ђ?H;Ht3HG8, HE3Hf'x HG3 xH HH;rH\$0H _HHH;HL@HPHHSVWATAUAVAWH0H@MLL3Mu @I8AD$H|$ HІHHt"x3DB(HH脔@~8HHHHt$ !3L$Ll$xLd$pD$Ht$ HtjLf@HN8DxF8DIEuHMIHHDt-FH+H@8~8t@~8HNDH茆AH0A_A^A]A\_^[LD$HT$SVWATAUAVAWH0HD$(MLL3Mu @I8AD$H|$ 蔅HHt2xHbHHNHGHFLn H{@ HHt$ 3L$Ld$xD$Ht$ HtUHN(6DxFPDIEDIEuHMIHHNDtLHI@2AH0A_A^A]A\_^[HL@HPHHSVWAUAVAWH8H@ML3Mu @It$pH$hgHHtHHHHz@ HH$3L$L|$xt$pH$HtJHO5xG8IuHMIHH<tLHI@X!H8A_A^A]_^[LD$HT$SVWATAUAVAWH0HD$(MLL3Mu @I8AD$H|$ THHtHxHHHN֋HGHFH\HF HIHF(Ln0Hjy@ HHt$ 3L$Ld$xD$Ht$ HtUHN8|4DxF`DIEDIEuHMIHHDtLHI@AH0A_A^A]A\_^[HL@HPHHSVWAUAVAWH8H@ML3Mu @I8t$pH$HHt5H蟊HHHHCHHCH8x@ HH$3L$L|$xt$pH$HtMHK H3xCHIuHMIHHtLHIH8A_A^A]_^[LD$HT$SVWATAUAVAWH@HD$(MLL3Mu @I8$H|$ hHHD$0Ht9xHOHL{L|$8I蛅HIMoHw@ HH\$ 3L$L$$H\$ HtOHK(2xCPIIuHMIHHtLHI@|H@A_A^A]A\_^[HL@HPHHSVWATAVAWH8H@ML3Mu @I8t$pH$PHHD$(HtH~HHHu@ HH$3L$Ld$xt$pH$HtJHK0xC8IuHMIHHtLHI@HhH8A_A^A\_^[MLHRH\$WH Hكyu4Ht?AHHH@8y(t @y(Hu H tI H\$0H _̸Au H tA HIHHH%gHIHH@H%FHIHH@H%&HIHHH%HIHH@H%HIHH@H%@SH 3Mu@JI9u)9Zu$zuz FuIHH@vMHLHz؋H [@SH LYu.H3sSP HtH HAIH sI H [̸AMLH@SH LYu.HrSP HtH HAXIoH prI H [@SH 3Mu@JI9u)9Zu$zuz FuIHH@MHLH ؋H [MLHs@SH LYu1HqSP HtH HI|H }qI H [̸A@SH 3Mu@JI9u)9Zu$zuz FuIHH@MHLH;؋H [MLH@SH LYu.HpSP HtH HAHIoH ppI H [H\$WH AHHHH+pHHL$0H tH*zHH\$8H _H\$WH HAHHoHH 8tHyHH\$0H _H\$WH AHxHHHkoHH tHoyHH\$0H _H\$WH HGAHHTHHAH>HAHnH 要tHxHH\$0H _H\$WH AHHHHnHH \tHxHH\$0H _H\$WH HAHHuMcIINM蟆3҅tJIHyI$EL$IHT$pH@PH\$`Hl$hHt$xH0A_A^A]A\_HcHL H$H ),H(H Ht HH@+H(H\$Ht$ WH H:HH HHuZHtB@2@u:HH;H#HtHH#LHHtHHH@HH\$@Ht$HH _HtHd$0LD$0Hd$8H$HH}HLD$8Hf$HHbHT$8HL$0H;@HtHHH@<HL$0H6HH@!$HL@HPHHVWAVH0H@HX IL3HuWfH|$XvhHHD$X3H\$`Lt$PHt$XHu.HHHH^INGIVHVIvIN!H\$hH0A^_^Ht`H\$WH HHIHt HH@0HgHO(Ht HYLL wnH*hHg(H\$0H _H!HaI LISIKVWATAUAVAWHXICHLHIS HH@3H$H$H0AO0I!w(DFHHNH@HHBH~gHD$HHt,L0HpHHD$ L :EƺHs3H$L$H$H$Hu%HH$HHE3E9g0LAfAf HL$AHH@(H$HHd$(Hd$ E3L$H$HH@`Kx?L$H$M9.t IM.IAFH$AF H$HHHH$AIE;g0Iw(HH$HH3HXA_A^A]A\_^HUWAVHXHHD$PHXHp HIH3HDHHytHy(t3H5C[HHt$XHD$`@H{Hd$8HK9[upA9 [ueA9[uZA 9ZuOf9CuDf9Cu>AEHT$pH ^{FA;=HT$8HL$pHD$8HD$ EDCSHd$@HL$8HLD$@HH@0JHL$@HL$0HtHH@$HL$@Hd$HHLD$HHHxHT$HHL$0HD$0Hd$0HCHYHtHH3LHL$HHtHH@HL$0Ht HH@HL$8HH@HL$@HtHH@i3HSHtH{(u H}HHH3iL$I[0Is8IA^_]@SH Iمt NHu@BH $3HuAH $7H $H H $HtHH@3H [H(LI3LA@MtAI Ht#9u9Huxu x FtAHMIC@I@DAH(H)Xt@ H 3H(Hy(t A(H(H\$Hl$Ht$WAVAWH03MIHLHHMu @I9A98u9A9xu3Axu)Ax FuHZHHHH@dIH9ztaH H@Ņu9uAF9Au9F9Au1F 9A u)HCHt4LKMHI tuxHH9{u@H[IjWH\$PHl$XHt$`H0A_A^_H\$Ht$ UWATAVAWH$H@HDH3H0E3HAEHL$hHH9u%9Gu9Gu9G HD$hAEHD$ L 3H gD9;tcHCLMHL$hEHEHEt%D9#uH@(H@8yHL$hBD9#uH@0H@@HEEF@HH<L HM\DsDcЅt$A;2"A;LHHMt$A;"A;LqHHMt$A;"A;HL}HD$pH}HL}AD|$`E3L|$pHUHD$ ITutH\$pHD$`L|$XE3L|$PE3L|$H3L|$@HL|$8L|$0L|$(HD$ HcHt HIHuD9|$`uHUHM H}LHMt$A;%"A;LHHMt$A; "A;LAHHMdt$A;"A;HD$xL|$xAHD$ E3HUHAHt HH\$xuoL|$XHD$`L|$PE3L|$HE3L|$@3L|$8HL|$0L|$(HD$ gHcHt HNIHuD9|$`uHUHMH}Ht H Ht HHL$hAHt HHBhH0H3bL$@I[@IsHIA_A^A\_]ù@̹W̹̹@̹W̹̹@̹W̹̹@̹W{̹p̹@e̹WZ̹O̹@D̹W9̹.@SUVWAVH`H?H3H$P3IMM+M"I(HT$0AI)u 6=u zD$0HL$0H!Ѓ.t \uHHpHfuHHHDHL$0؅y}HfD$(HD$0H+D$ HHAH=v@[LD$ H+HIt tyti"tdPuTHHL$0s؅xHL$0HIDً@H$PH3`H`A^_^][ù@̹W̹HHpHxLp UHxHH=H3HpE3LL$HLD$@Lt$@Lt$H *HL$HHT$PHT$(E3Lt$PE3Lt$ HH@H@L9t$PHL$@LD$@HL$`DȺt$ "PH|$`fDfHt$`fD9t$`t2H_f/f-wH HsHHfD90uHD$`H+HsHH=fDt`LD$`E3HT$@HL$HHL$P HL$HHt HH@.HL$@HpH3^L$IsI{ Ms(I]ù@̹W̹b@SH yHt H \CH [HHXHhHpHx AVH =QMLIu Mu @I&H Q3LQI;H1Ht+H9^t%HA9uBA9AuBA9Au B A9A tHH~ H9u9H QH9uHNHHFLH fQpHHtHMHHI>u ۸D؋H\$0Hl$8Ht$@H|$HH A^E3DAQe=E3DAQuH\$Ht$H|$AVH HqH>tcHyt9HtmLvMt!INII^IVLHuHfHgHO@Ht HH@HO&H\$0Ht$8H|$@H A^ù H\$WH HHH.tHuUHH\$0H _̸A ̃A ̋A H\$Ht$WH0HHu@H3HY@H9;u%L H\$ 3DGH fPxH HH HHBH\$@Ht$HH0_HLvHHtH@H%I̸@H\$UVWAVAWH$0H HB8H3H E3ALt$8HLt$@3HD$0EF(Dt$HHL$PI@aHL$PDt$xxwD$xHtLCHL$0HH[HHuHD$0LHHL$0H@l؅x(H/MHUAHEu9dHL$0H H3YH$ H A_A^_^]A;uzHUAA'DfEt2fDEfE;us fDMHrċfDEHt37H;t LA"HHfDHHfD94AuLLcHMɺ?t @HHfD94XuHcfDEHEH=szfDLH% HL$0#LH HL$0DL  HUHL$0t D$ Dt$ R[GMtI @̸H\$WH HtH?QHH\$0H _@SH HH Ht H#HKHt HccH [HL$SH0HD$ HYH Ht H#HKHt HccH0[H(y(t A(0H(H\$Ht$WH 3H9q~53Hxu;s}pH H CP;s}THKH 91PH;s|H Ht H#HKHt HccH\$03Ht$8H _ù̹ H\$WH Hy HH6HK)HϋH\$0H _HL$WH0HD$ H\$HHH*HHy HHHH(tG(HH\$@HH Ht H#HKHt HccH\$HH0_H8r3D$ D$ H8@SH HH NH#H [HL@HPHHSVWATAUAVAWH`H@MLL3HFM=DHHHf94BuH EHL$HHt$(HH@HNHD$ HD$(+3HL$L$L$DHD$(HD$ HHD$@HHfA9tEuHcHHL$8Ht$0HH@HMHHD$0HD$ 13L$L$L$DHD$(HD$ H|$@H\$0H$HHHT$HLMHt5 t%t"tPt!@ ̹W ̹ LL$8MIHt5 t%t"tPt!@L ̹WA ̹6 AGHcAEI Ht[IAGHcEIO Ht=IGIcWIH HtHD$ HIGH HtHAGHHt$@HAE@HLH L3H`A_A^A]A\_^[HWH0H@HXHhHp IHHHt=Ht8H GHd$HHMLHHM %WH\$@Hl$PHt$XH0_H H%6H(HAH9tH(@SH HHHt HH [ù H( NH(HIH%ME3E3AQH%CHHXHhHpHx AVH HAAHH ; A;{E3;|9?;}ǹHH;wyHKHthHC{D93|\K9 }U+;MHc LHcHCHH H6Lct tWtG"tBPu23HCHc fD4H3H\$0Hl$8Ht$@H|$HH A^ù@@ ̹W5 ̹* HUVWATAUAVAWHhHHEHXHt-H3HELEHH3Mu @RIHHf9BudL]EHɸH;v HH]HEHtfHu H>f9Hf:%[H:HHf8%uH>Hff%tHHHjHH+HHPLcL HM<t$ "PLnIM DLA9]~"IEHUJ xtAIE;}|AIIuLME;}IEN4IM 8MH]IIfC9FuIHMH9>t*HHH;uAHMkHHf9g@̹W̹̹N̻@ HMH]HEHHMjHMH3TMH$HĠA_A^A]A\_^]HHXHhHpHx AWH AHHuqAHH<f<HH<@f<HH|<fx<HHr<fn<L=/<3IHHtHHcHr3Hc˸HALfH\$0Hl$8Ht$@H|$HH A_@SH H9HtH HHzH;uH [@SVWATAUAVAW!zaH+HD$xHw)H3H$!MLD$@LLHL$HHT$PLD$`LL$p3f\$0H$vHT$0H$Lu VI $ wH&Hs TI$H$IbD$0=@H$HHHf9AuH$Hcȅt<3HHHr$H Hv!H$ H$WH$H$"3HH$Ld$HLl$PHD$`HD$@HL$f9$tEA0IGAf\ufD98ufHH'L fHIfA9u'H$Hu @DLHHfA9HuMHE IuDL$(HT$ DIE3HT$@IMH$H$H;JH$8LL$0E33H$YD$0D$8D$(HD$8AH$HHHf9xu|$8@t @Ǚ+LcDt$0H$I΅t;3HHHs WHvHH$H$H$H$Ht$@"3ۋ|$8Dt$0H$Ld$HLl$PHt$`Hu#H$HNH$$H3H$ f:=HHuOxHH  wH&Hs eHHT$ HwxHHhx3H$ H3&FH$P H0 _H\$UVWH$HH#H3Hp3HH AHD$HE3HD$PHHD$XHD$`HD$`HD$ ؅HL$HHtHL$`HL$HuyHT$pHL$He؅ubHL$HHD$hD$@HD$8LL$@Hd$0LD$pHd$(3Hd$ `tHL$HHt Hd$HHHgHL$HHtHpH3DH$HĀ_^]@SH HH Ht H#H [H\$WH0HyHHuZHyuSH yHtHHTHC+E3H 3DHtHH'HCHCHtH E3E3HHCHtH HiH\$@H0_ NHHXHhHpHx ATAVAWH HHI&H wIs HE3fD;1E~'H fD;9kHfD;0tlHfD;9u SfD;8uWHfD;9u >HH7H/HH+HHHH KH;~H+fHHuHHfD;0twH;srfD3HH\H7 wIrBHHH+HHHH KH;s0~H+fHHuHfD;0uH;sfD33 H\$@Hl$HHt$PH|$XH A_A^A\@USVWH$"WH+HEHH3H!DL$xLEHHHL$p3ɋHMHMHM@"MH:f?}0D$hHH3ɋمÉ\$`HHtHHL$p3҅9T$xHUHUHUHf\tKHfu HdHvHH"t$HHH;|HEHEHHM39D$`t)HHL$p ؅;HHL$pHH3ɅuL$hHHL$p؅HH3҅HHL$p؅HHL$pz3҅f?=o9T$xt1HUHUHEHELLHUHL$p 39@"ub9T$ht\HT$hHD$hHD$ AE3HM (H\$hH]HHHt HHHL$pHf\tyH3fu H9T$xHT$hHD$hHD$ AE3HH]H_3Ʌu#Ht H 3Ht$hHuHL$hHD$hHD$ AE3HH3ɅuHt H3Ht$hHutfHL$hHEHD$@HD$hHD$8HL$0D$(L$ E3E3HH3҅Ht HXHt$hHuHHL$pn3҅f?=u$LE3HUHL$pHu3ҋ؅tf?{0HHf9GuH;T$ DL$xLHHL$p؅,HHL$p@"uOHUHEHD$ AE3HHMD$`3҅u-‰T$`Ht HdD$`HuHu D$`E؉@"ILǺHMt$ vb"YPEHHL$p&؅XHHL$p+3҅?f?{uaHHf9GuH;uJ@"D$ E3LHHL$pY3҅y 9@"HHL$p3҅E@"L$`t wT$`HT$XHT$PHT$HHT$@HT$8HT$0HT$(HD$`HD$ E3E33H3҅ug9T$`tZH5HEHHM3҅HEHHEH gH;|9T$hHUHMHuT$`HT$XHT$PHT$HHT$@HT$8HT$0HT$(HD$`HD$ E3E33HP3҅tT$` 9T$`D$`HtH!3ҋHUu|9T$hA9T$`7HUHUHEHEHUHMHuGHMHt91 *@̹W̹̋Ht HH!H3y:H"_^[]H\$ UVWATAUAVAWP OH+HH3H$@ E3ELd$0HAHtLD$0Hl$0@&H/fD;eL-HT$@H ؅AIMIHL$@tHHcIHrIHItHHT$@H؅{f;D$@Dd$ LHT$@HEt.L7E؅y+E3L7LDd$ HT$@HDE3؅x6H wH&Hs HfD;!t HH$@ H38H$ HP A_A^A]A\_^]HVWAVHHD$XHXH"H3H$MIH3H\$`HL$PH\$HH\$p3DCHAHHD$8Hu 0E3LIHFHHu HHLHD$@HtHHD$0;s!HD$xH9D$pt HL$pȅt73HHHrH HvHL$pHD$pWHD$xHD$p3HD$pHt$8Lt$@|$0HuF|$(HD$ DM3ҍJHD$pfHD$HT$pHL$HHHD$xH9D$pt HL$pH$H36H$HĐA^_^H\$UVWAVAWH$0H H:H3H E3HAHD$0HLt$83Lt$@EF(Dt$HHL$PI7=HL$PDt$xxwD$xHtLCHL$0HH[HHuHD$0LHHL$0H@c؅x(H&)HUAHEu9[HL$0H H35H$ H A_A^_^]A;uzHUAA'DfEt2fDEfE;us fDMHrċfDEHt3.H;t LA"HHfDHHfD94AuLLcHMɺ6t @HHfD94XuHcfDEHEH=fDLHHL$0LHHL$0tHt1D$  Ht"Dt$ L LHUHL$0uEW=7/H\$Ht$H|$ UATAUAVAWHl$HHYH3HEpE3HLt$0ADt$$AfD$ AN@H\$(AEԾHH[ @f9u HvHuD$ DafuL+IH@fA;uDNLIHf;uDNL fu0HVHL$8LIHLޣHL$8+Gf uFLIH蹣HT$(NHL$@)D$@L$PsFH\$(ADl$$D$ fuHuLIHd/HtHT$ HTD$ f#@fD$ ft f#fD$ ȃtGt9t+tA;IHt L1L(LLOL&LHI¢Hu1f|$ LD$(H CH\$(PH\HT$0H1HcsL{DHL$`YLD$`IH荡MLDkM;HD$0fA<u[ITHt2HL$8L)HL$`LHL$8:gL LHL$`áFHL$`fA9uELL蟡"fE9,uELLL{xLD$`H觠II H\$(E3Dl$$HtL9t$0t HHEtHt H=HHMpH30L$I[8Is@I{HIA_A^A]A\]H\$WH 3ۋHt E;uH\$0H _@UAVAWH`Hl$@H]@HuHH}PLeXH" H3HEE3LL"LHfD9!HEDeHD$0LMHEDeHHD$(E3Ld$ 3EAy˹zt-tt= t؁NcU@3uIHH;v 8ItaH;wVH HHH;rC%t:FHH;w HHCH+H|$@Ht StckHu(F;r!HVHHt HeapHMMtVHtQHEIHD$0LMHE3HD$(H|$ Su,tt= t؁NHtHO9Heapu HIHM&WHMH3z-H]@HuHH}PLeXHe A_A^]@UATAUAVAWH`Hl$@H]PHuXH}`H H3HE3MI8DLHu WIHE}HD$0LMHE}HHD$(E3H|$ 3EVzt.tt= t؁NU@HDuHML;v EtcAH;_wWH ~HHH;rDe#t;AFHH;w HHAH+H|$@Ht StckHu*AFA;r!HVHHt HeapHDuADuHHHELHD$0LMHEIHD$(3H|$ u/<= t{؁NpEt_K6A޹@IHtL}HvLHt$ L腖LLt؅yIeI' I73HtHO9Heapu H=Ht H'HMH3*H]PHuXH}`He A_A^A]A\]H\$Hl$ VWAVH@E3IM0HHHu WHHT$pLt$pHAʳuFt1t&= tմ؁N3Lt$hHD$hHHD$0HD$pHD$(DJD$ DB HD$hHtau]H@HHHtPD90uKHHfD94Aux@HHHHtHL$hLHQHHR>,%LƺH؅yL3HHL$hHtrHL$pHtH\$`Hl$xH@A^_^DAAtME+t@Abt2At!E+tE;t E3.&A3Ht7f9 u yu#f9t"f9tf9u9Af9uf9AtWH\$Hl$Ht$E3HHEȅ(EPA Cftr)AfA;v'fwAArf;sAA/BD;s.AfDCf;w$fDfD;wAAD;sA H\$AHl$Ht$HUATAUAVAWHH@HEHXHpHxAALLHeLHPDLe`Mu @I$$HuPHu wH DIu CL}XI6؅-YXtWHM`~$؅H}`HLEHHH؅LIH>HM`"؅H}`HLEHdHH`؅[LIH訾5HM`b!؅5H}`HLEHHH؅ LIHrHM`؅H}`HLEHHHĶ؅LIHT{HM`؅H}`HLEHzHHv؅qLIHpKHM`؅KH}`HLEH,HH(؅#LIHĪHM`^؅H}`HLEHHHڵ؅HHuAHM`#؅H}`HLEHHH؅LIHndjt`t W6HM`l+؅#H}`HLEHHH؅LMIHHM`)؅H}`HLEHHH؅LMIHTHM`r(؅H}`HLEHbHH^؅YLMIHO0HM`&؅0H}`HLEHHH ؅LMIHHM`x%؅H}`HLEHHH؅LMIH虇HM`#؅H}`HLEHoHHk؅ujLMIHsDHM`"؅uHH}`HLEH)HH%؅u$LMIH誸؅u HEHeI$H \$ ML8ӹP?HMHt HH@L\$@I[0Is8I{@IA_A^A]A\]HATAUAWH`H@HXHhHpMELHt5H$HHLLH=HL$H!Hd$@H$H؅H H$u WAIu H$tH$;H$؅LL$@E3H$H$Iy؅t)=s`tt NËE>H$HD$0Hl$(HD$@HD$ D$EIH<؅uHd$@HL$@Ht3#H \$ LLӹP=L\$`I[ Ik(Is0IA_A]A\HAVH@H@HXHhHpHx MAHHt2HT$xHHLLH^<HL$0@H$?؅H ڮH\$pHuWZHuEE3HT$xHI؅t)=s$tt NË 3H Z\$ LLӹ <H\$PHl$XHt$`H|$hH@A^HAVH`H@HXHhHpHx MAHHht5H$HHyLLH:HL$HHd$@H$؅H H$Hu WHpu LL$@E3H$HI؅t)=satt NËF?H$HD$0Hd$(HD$@HD$ D$DHHL؅uHd$@HL$@Ht33H \$ LLӹ`:L\$`I[IkIs I{(IA^HHXHhHpHx ATAVAWHPH`ALHLH3MO>9L$IGH:Iu 'H$G؅H  L$LL$@3IIH uHQK8t3rtt߁NH$DD$IHD$0HHD$@Hd$(HD$ ؅uFHd$@LΉ\$ L ӹ8L\$PI[ Ik(Is0I{8IA_A^A\ûWH|$@t(H ʪHL$@3.H uLHg7E3L;a;Z~FAP;BAP;b-Pc~f~tij4AWAø,;tE~./t/01to;wYNX~tt ttp>#;Btg'~'~;A,~AHHXHpHx HHUATAUAVAWHhH}oALMLDH53}HMHEHEHEDHMLmMu @IХAH cA*Mu WIu~HMwI؅uoHU`؅u^HUDEE3LcIHEHD$ R؅=s%; NËLmHMHtHMHtHt HdHMr3H9ut HMPEt H d&@= MAEHUAMHM)EM6LMOLwHHT$(Ӊ\$ 4HM-M3ۅVA+9A+A+t5A;t W fEHE9t fE3f]*L}LE] AAEYHHr]oEt)LE332t;KH_3DA9wEIHMEHtIGLEAHHM AH܅tIOHUAH toHMmHHHMLEf}HUoH]H؅HMDeo3EH]E;7EHMO=QlL}LE] AAEHH!]oDA9v]IOAH HHHM͡LEf}HUoH]H؅DeoEE;7r3۸ HufEH4fEHEM HM$HHEf}LmEMAEAMLMOLӉ\$ 1L$I[8Is@I{HIA_A^A]A\]HHXHpWHPAHHMtPAHPAIHH )@HLHLHHL$(\$ 0HL$xLʉ\$ LHW0H\$`Ht$hHP_H\$HL$VWAVH`MAHHtL$D$HH o$HL$@oH ТMu WHu H$u @yH$؅bHT$4$؅GL$4tYtW\$0#A E3H$HL$@R؉D$03f|$H$H$AE3H$HL$@ ؉D$0H|$HNAE3H$HL$@۞؉D$0HL$HbH|$HH؉D$0u^H|$8LE3$Iϻ؅t)=s7tt NË3\$0H$HL$@0H 9\$ LL}ӹ.H$H`A^_^H\$HL$VWAUAVAWH`MAHLtL$D$HH KHd$83M@D$D$HL$@H MH$u WH2u H$u @u H$tH$;؅uHT$0AL؅^pDE3H$HL$@؉D$44L$0LH$$VHT$8HL$HuOuTt0;t&י= tʙ؁NP؅LL$8D$&tHL$HHL$Hx؅unLL$HE3AH$L t1IAҋ؅t/=s=t;y NËH$3\$4L$HL$@HL$8HtH ~@\$ MLӹ+H$H`A_A^A]_^HHXHhHpWHHIHHAHsL fD$PDH$HHD$XHH$(HHD$PHD$@HD$pHD$8$D$0H\$(Hd$ )D$p$L$I[IkIs I_HHXHhHpWHHIHHAHE3fD$PDH$HHD$XHH$(HHD$PHD$@HD$pHD$8$D$0HH\$(HD$ )D$p$L$I[IkIs I_HHXHhHpHx AVH@AIDL$pLLHH{V)Hd$0H|$xHu WH'H Y!IufDD$pHD$0E3HD$ H肪؅t)=s?tt NË$HL$03һHHDӋHL$0Ht֖H tYHuLΉ\$ LӍO'):HHL$xLLHHL$(\$ (HL$xgHl$XH\$PHt$`H|$hH@A^HHXHhHpAVH@`MAHHt:HT$xHHhDL$pHLLD$ L'HL$0H HubHL$xAHL$x؅uELL$xE3T$pI軴؅t)=s$tt NË 3H CLΉ\$ L/ӹ'Hl$XH\$PHt$`H@A^HHXHhHpWAVAWH@H`EILD$HHL3M&H$Hu W!/H @aAIZuWD$HD$0E3HD$ H辧؅t)=s-tt NË HD$03ۋHL$0Ht$t H ˘L΋HuLb\$ Oz&LL$(\$ ]&Hl$hH\$`Ht$pH@A_A^_HHXHhHpWH0@0ALD$ IHDL$`H}H@%H _)H#uET$`LL$hE3Hp؅t)=s$tt NË 3H L͉\$ L$ӹl%Hl$HH\$@Ht$PH0_HHXHhHpWAVAWH@H`EILD$HHL3MK$H$Hu W!/H S@AIuWD$HD$0E3HD$ Hr؅t)=s-tt NË HD$03ۋHL$0Htؑt H L΋HuLV\$ O.$LL$(\$ $Hl$hH\$`Ht$pH@A_A^_HHXHhHpWH0@0ALD$ IHDL$`HqH"H ݕHuET$`LL$hE3H$؅t)=s$tt NË 3H nL͉\$ Lӹ #Hl$HH\$@Ht$PH0_@UATAUAVAWHHl$0HHHHH3HE@E3HUfA9 EHMAAL}AutA(HUAIHM )E M0؅LuM@HUI؅E9~E~IL;vWLEIt=r%tAA;t؁NLuAEtaAH;wUH IHH;rCt:AGHH;w HH<H+Ht$0Ht StckIu@AGA;r%HE3HHtHeapIE3Hu E3EAE9~ADN}t*s$tt NË 3DLӹ H\$0H _H\$WH HHH H p}LMucH؅uU3I؅t)=s>tt NË#H3x؅uHH #|DL#ӹ H\$0H _@WH`HD$@H\$pHHHL$H+zH\$0HD$HHD$(HHD$ AE33H HL$H{yH\$pH`_LHxAICMKAHL ICE3HH IS3ICd$ )D$PL$`HxH\$Ht$WH0BAHHt0HL$@MLHLHL$@vHCHw^H b{DHH蔠H M{t*s+tt NË 3WL \$ L\ӹHt$PH\$HH0_LHxAICMKAHL ICE3HH IS3ICd$ )D$PL$`@HxLHhAICAHL TICE3HH IS3IC)D$@L$PHh@WH`HD$@H\$pHHHL$HwH\$0HD$HHD$(HHD$ AE33H -4HL$HvH\$pH`_LHxAICMKAHL ICE3HH IS3ICD$ )D$PL$`HxLHxAICMKAHL PICE3HH IS3ICD$ )D$PL$`HxLHhAICAHL 4ICE3HH IS3IC)D$@L$P HhH\$Ht$WH IDHH_=H \&xLMuWLHW؅u>E3I؅t)=s$tt NË 3H wDLӹhHt$8H\$0H _H\$WHHHHL$@tD$@HD$`LL$PH H\$0E3HD$(3)D$`L$pD$ MHL$@0tH$HĀ_H\$WHHHHL$@btD$@HD$`LL$PH |H\$0E3HD$(3)D$`L$pD$ HL$@sH$HĀ_HHhALH GAHE3HP3)@HH@HD$(D$  HhHHhALH AHE3HP3)@HH@HD$(D$ HhHHhALH AHE3HP3)@HH@HD$(D$  HhHHhALH AHE3HP3)@HH@HD$(D$ HhH8LE3T$(H 3D$ H8H8LE3HT$(H 3D$ H8LHxAICMKAHL ICE3HH cIS3ICd$ )D$PL$`HxLHxAICMKAHL ICE3HH +IS3ICd$ )D$PL$``HxH\$WH HHDHt*H isH3vH FsH_PHHCTHHpHO y(t A(7HH |FrHH cr3ۃt HMXmDLӹHl$8H\$0Ht$@H _H8HDLHT$(H HD$ H8H8HDLHT$(H ߾HD$ [H8H8HDLHT$(H HD$ H8H8HDLHT$(H HD$ H8H8HDLHT$(H HD$ H8H8HDLHT$(H gHD$ [H8H8HDLHT$(H OHD$ H8H8HDLHT$(H 7HD$ H8H8HDLHT$(H HD$ !H8H8HDLHT$(H HD$ ![H8H8HDLHT$(H ߽HD$ H8H8HDLȉT$(H ȽHD$ H8H\$WH03Hډ|$HHuW?f:HD$HHQxDLHD$(H D$ #x L$HffH\$@H0_H\$WH HٲH wAnHKx6u9HKxf7=s tt NËH mH\$0H _H8HDLHT$(H ǼHD$ H8H8HDLȉT$(H HD$ H8H8HDLHT$(H HD$ H8HhAHAHLD$@LL$0LLD$(DH a)D$@L$PD$ HhHhAHAILLD$0LD$@LD$(DH !)D$@L$PD$ HhH\$WHHHHL$@iD$@HHD$`L$PH ܻDLH\$0HD$()D$`L$pD$ HL$@hH$HĀ_H\$WHHHHL$@"iD$@HHD$`L$PH |DLH\$0HD$()D$`L$pD$ xHL$@[hH$HĀ_H\$WHHHHL$@hD$@HHD$`L$PH DLH\$0HD$()D$`L$pD$ HL$@gH$HĀ_H\$WHHHHL$@hD$@HHD$`L$PH DLH\$0HD$()D$`L$pD$ XHL$@;gH$HĀ_HhHALHT$0AHHT$@DH XHT$(H)D$@L$PD$ HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ @HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ @HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$  HhHhHALHT$0AHHT$@DH PHT$(H)D$@L$PD$ HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$  HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ Hh@WH`HD$@H\$pHHHL$HkdHH\$0HD$HHD$(HT$ A DH HL$HcH\$pH`_LHxAHHAHMCMKL FMCDH <ICISD$ )D$PL$`HxLHxAHHAHMCMKL MCDH ICISD$ )D$PL$`hHxLHhAL >HAHMCHMCDH IC)D$@L$PISHh@WH`HD$@H\$pHHHL$HbHH\$0HD$HHD$(HT$ A DH CRHL$HaH\$pH`_LHxAHHAHMCMKL MCDH ICISD$ )D$PL$`@HxLHxAHHAHMCMKL MCDH ICISD$ )D$PL$`訲HxLHhAL NHAHMCHMCDH `IC)D$@L$PIS(Hh@WH`HD$@H\$pHHHL$H`HH\$0HD$HHD$(HT$ A DH 蒫HL$H9`H\$pH`_LHxAHHAHMCMKL MCDH ICISD$ )D$PL$`耴HxLHxAHHAHMCMKL MCDH lICISD$ )D$PL$`HxLHhAL HAHMCHMCDH IC)D$@L$PIShHh@WH`HD$@H\$pHHHL$H+_HH\$0HD$HHD$(HT$ ADH ôҩHL$Hy^H\$pH`_LHxAHHAHMCMKL VMCDH ICISD$ )D$PL$`HxLHxAHHAHMCMKL FMCDH <ICISD$ )D$PL$`(HxLHhAL HAHMCHMCDH IC)D$@L$PIS訰Hh@WH`HD$@H\$pHHHL$Hk]HH\$0HD$HHD$(HT$ A DH HL$H\H\$pH`_LHxAHHAHMCMKL fMCDH \ICISD$ )D$PL$`HxLHxAHHAHMCMKL VMCDH ICISD$ )D$PL$`hHxLHhAL HAHMCHMCDH IC)D$@L$PISHhHHXHpHx AVH@H`HHMH IHtDDH}DH̲H+؅Mu WI&H ]H襝u HLL$XE3H\ ؅t.=s tt NËH|$X=H|$XH lDAHLt$0Hd$(H|$ ؅u3Ht 3Hl`H %\DLUӹHt$`H\$PH|$hH@A^HAVH`H@HXHhHpHx IILHtLIHH HIHL$@L LH NHL$@zWHL$HnWHd$@Hl؅H$Hu WH'H "[Hޛu HD$@HD$ E3MHH؅t.=s tt NËH|$@=H|$0Hd$(H|$@H|$ ADHH q谣؅u3Ht 3H^H V[DLvӹL\$`I[IkIs I{(IA^HAVH`H@HXHhHpHx IEHHH`t*HH8LHQHL$HUH迡؅H$Hu WH'H u?ZH1u LL$@EHH؅t.=s tt NËH|$@=H|$0Hd$(H|$@H|$ ADHH  ؅u3Ht 3H\H sYDLӹ)L\$`I[IkIs I{(IA^LHxHAMCMCAIL 9MCDH T$0HICIc)D$PL$`HxLHxHAMCMCAIE3MCDH kT$0HpICISH)D$PL$`襷HxH\$Ht$WH I؋DHH7=H \&XHHuWf uPHA؅uBHE3ު؅t)=s$tt NË 3H ַWDLӹNHt$8H\$0H _H\$WHHHHL$@TD$@HHD$`L$PH DLH\$0HD$()D$`L$pD$ 8HL$@TH$HĀ_H\$WHHHHL$@RTD$@HHD$`L$PH ,DLH\$0HD$()D$`L$pD$ 設HL$@SH$HĀ_HhHALHT$0AHHT$@DH ȮHT$(H)D$@L$PD$ HhHhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ 萷HhHhHALHT$0AHHT$@DH `HT$(H)D$@L$PD$ HhHHXHhHp WH@IHHt(HH蝪H*LHL$`"P3Hl$`HtHQtrf/HD$`HNxUHD$0DMl$(H\$ L_؅t5=t)=sVtt NË;4f/f%HQLHDȹ?WHL$`Ht3WDLӹHl$XH\$PHt$hH@_HUWAVHHpHEHXHpIHH*t'HM8CLH]HM8NE3Lu0Hu@[L7fDuE)EMMHNHLM0LEHHT؅xHM0HLHzHeTDL ӹHM0Ht HH@6TL\$pI[ Is(IA^_]HUWAVHHpHEHXHpIHHt'HM83LHŬHM8ME3Lu0Hu@[L7fDuE)EMMHNHLM0LEHHuS؅xHM0HLHyHUSDLqӹHM0Ht HH@&SL\$pI[ Is(IA^_]H\$WH`'HHt)HL$p9HNLHL$pLL$0HO3L$PfD$ LD$@HHD$ H)D$@RL.DȋЋH\$xH`_H\$Ht$WH`3HHft$@H%NH PHu@PH7HKx輐u3HSxHD$@DH H|$0A HD$(HT$ H ePDLӹHt$xH\$pH`_HUWAVHHpHEHXHpIHHzt'HM8蓥LHͫHM8KE3Lu0Hu@zL7fDuE)EMMHNHLM0LEHH@P؅x;HM0HHP؅uHM0HLHvHPDLrӹHM0Ht HH@gPL\$pI[ Is(IA^_]HUWAVHHpHEHXHpIHHJt'HM0cLH=HM0IE3Lu8Hu @L7fDuE)EMMHNHLM8LEHH8O؅xKDu0HM8HHU0HO؅u)D9u0tHM8HLHuHZODLϪӹHM8Ht HH@$OL\$pI[ Is(IA^_]HUWAVHHpHEHXHp HHt'HM LHnHM HE3fDuLu0EEEEHFLM0LEHHNH8fN؅xyDu HM0HHU HDN؅uWHM0HtLu0HH@$ND9u t2EEEEHFLEHHNHHMDLӹMHM0Ht HH@ML\$pI[(Is8IA^_]H\$Ht$WH`HHH23H Qft$@LHu@PH7HKxu3HSxHD$@DH ĩH|$0AHD$(HT$ &H KDLӹYHt$xH\$pH`_HUWAVHHpHEHXHpIHHt'HM8ӠLH+HM8YFE3Lu0Hu@[L7fDuE)EMMHNHLM0LEHHL؅xHM0HLHrHKDLaӹYHM0Ht HH@KL\$pI[ Is(IA^_]HUWAVHHpHEHXHpIHHt'HM8ßLH-HM8IEE3Lu0Hu@[L7fDuE)EMMHNHLM0LEHHxK؅xHM0HLHqHJDLӹIHM0Ht HH@JL\$pI[ Is(IA^_]H\$WH`HHt)HL$pɞH֨L!HL$pNDL$0HO3L$PfD$ LD$@HHD$ H)D$@JLΨDȋЋH\$xH`_HhHALHT$0AHHT$@DH HT$(H)D$@L$PD$ HhHWHPH@HXHhHpIIHHt*HH袝LH{HL$@%CHd$@H#؅Hu WH'H GH蝇u LD$@HH؅t.=s tt NËH|$@=H|$0Hd$(H|$@H|$ ADHH ۧz؅u3Ht 3HgJH FDLӹH\$`Hl$hHt$pHP_HHXHhHpHx AVH`IAEȋDLHϧ}Hd$0H$HuWzH'INLLL$0EHMILD$@H H )D$@L$PcG؅xHL$0HxLHHBGHL$0Ht HH@)GDLӹL\$`I[IkIs I{(IA^H\$Hl$VWAVH`HHHIE3D$Lt$PHT$PHO(؅uMHD$PE3HD$@L lH$3HD$8H dHt$0Dt$(Hl$ 蠘؅t=ADDLOӹL\$`I[ Ik(IA^_^H\$WH HHxHt@H ӤDH菄tH3GH dDH_HH蠑Ha%HH莑HOy(t A(Z?H\$0H _HHXHhHpHx AVH MMLHHH٦HOHR؅xWLHHt,H CHnH ߣC39_xt HOPy>DLӹ7Hl$8H\$0Ht$@H|$HH A^H8LDHT$(HH {D$ 蒦H8H8LDHT$(HH [D$ ڧH8H8LDHT$(HH ;D$ H8H8LDHT$(HH D$ ZH8H8LDHT$(HH D$ 蒥H8H8LDHT$(HH ӥD$ ڦH8H8LDHT$(HH D$ H8H8LDHT$(HH D$ 芧H8H8LDT$(HH |D$ 觨H8HHhALHH@AHLD)HHD$(T$ HH :HhHHhAL@H@AILD)HHD$(T$ HH -HhH\$Ht$WH I؋DHHߤ-H L@HuWmHuPH,؅uBHE3ɒ؅t)=s$tt NË 3H ?DLYӹ9Ht$8H\$0H _HVWAVH@H@HXHhIAHLt,HH貔DLH(HL$03:Hd$xHuWoH'HL$0_؅u[fD$ LMFxIHt$0HZ؅u/HLD$xH*qHH?؅uHD$xHd$xHDLأӹ HL$xHt HH@?H\$`Hl$hH@A^_^H\$UVWAVAWHPMHLHHIE3H_XD$L$Ht)H =H}H G`=#D`E3H$E3HO؅uVDG`H$HWXL rHD$@H ]H$HD$8Ht$0D$(Lt$ ѐ؅t=ADDL8ӹH$HPA_A^_^]HWH`H@HXHpHHLHX@Hd$xHL$HP:HH~9HD$xHD$0HD$HHD$(H|$ ADF`HVXH 0H|$xt=LHNM AHT$x賶؅y%HL$xHtHH@~=H9u3DLӹHL$H$9L\$`I[Is I_HHHUVWHhHHEHXHHLHϢHM39Hu Wx)M'3fsf~ȉEot!HM'HH^؅ug;uoH]gr)M'3fsf~ȉEot=HM'H4Ht%H7HH0H8uHM';}oH]gr3DLOӹHM7H$HĐ_^]H\$WH HHxHt@H :HwztH3=H L:H_PH與HIHHvHO y(t A(B5H\$0H _HHXHhHpHx AVH MMLHHHѡHOP:؅xZLHHt,H ܙ9HVH Ǚ939t HOX^4DLӹHl$8H\$0Ht$@H|$HH A^H8LDHT$(HH cD$ rH8H8LDHT$(HH CD$ 躝H8H8LDHT$(HH #D$ H8H8LDHT$(HH D$ :H8H8LDHT$(HH ӠD$ rH8H8LDHT$(HH D$ 躜H8H8LDHT$(HH D$ -H8H8LDHT$(HH kD$ -:H8H8LDHT$(HH CD$ .rH8H8LDHT$(HH #D$ .躛H8H8LDHT$(HH D$ 0H8H8LDHT$(HH D$ 0:H8H8LDHT$(HH ӟD$ 1vH8H8LDT$(HH D$ 1蓟H8H\$WHHHHL$@"3D$@HD$`LL$PH |DHH\$0HD$()D$`L$pD$ ,tHL$@W2H$HĀ_H\$WHHHHL$@2D$@HD$`LL$PH DHH\$0HD$()D$`L$pD$ /ԋHL$@1H$HĀ_HHhALAHDHPHH w)@HH@HD$(D$ ,HhHHhALAHDHPHH /)@HH@HD$(D$ ,pHhHHhALAHDHPHH )@HH@HD$(D$ /PHhHHhALAHDHPHH )@HH@HD$(D$ /谕HhH8LDHT$(HH kD$ 6H8HHhALHH@AHLD)HHD$(T$ HH 蕉HhHHhAL@H@AILD)HHD$(T$ HH Ҝ͎HhLHxHAMCMCAIL \MCDT$0HH ICIc)D$PL$`ÐHxLHxHAMCMCAIE3MCDT$0HH @ICH`IC)D$PL$`QHxH\$Ht$WH I؋DHHH 0HuWmHpuPHw؅uBHE3艃؅t)=s$tt NË 3H C0DLӹHt$8H\$0H _HVWAVH@H@HXHhIEHHYt(HHrLHLʼHL$0*Hd$xHuWsH'HL$0#؅u_fAD$ LLHHt$0HJ؅u/HLD$xHaHH0؅uHD$xHd$xHDLӹHL$xHt HH@L0H\$`Hl$hH@A^_^H\$UVWAVAWHHp>HHt'HM@QHL詻HM@)LwE3IHU0ID}0H/؅xxD9}0tmHGxDLHt$ HHHH x{E0t5ILEMHfD}IEHM)EH/2DLEӹ襻H$HpA_A^_^]H\$UVWATAVHHpHHt'HM@1H&L艺HM@(LwE3IHU0IDe0H.؅xvD9e0tkHGxDLHt$ HHHH zE0t3ILEMHfDeIEHM)E(.2DLϙӹ臺H$HpA^A\_^]HUWAVHhHHEHXHp LHHoH X,Mu @EeoHOHHUoHu-؅}oHM)HM)E)E'MM7HEHD$0HE'HD$(D$ /LOxDHH .؅tHM(HM(HMw؅uHuwHMH^HH,؅uHH|؅uHGxH@HE3ɃLDE)E'MM7LHU'H}V2H -*DL}ӹ襸L$I[ Is8IA^_]HHXUVWAVAWHPE3HHDxHrLxIMAO菷H_XHt)H o*HH G`O*#D`E3H$E3HO蘤؅uVDG`H$HWXL XHD$@H H$HD$8Hl$0D$(Lt$ s}؅t=ADDLҗӹ芷H$HPA_A^_^]HWH`H@HXHpHHH聶Hd$xHL$H&HuWyH#&HD$xHD$0HD$HHD$(H|$ ADF`HVXH }qH|$xt&LHNM AHT$xX؅x H`&u3DLHӹ萶HL$H%L\$`I[Is I_H\$Hl$Ht$WHpHHH+聵HuWKHH؅x:3)L$Pfsf~ͅtHL$PHH؅x;r3DLӹеL\$pI[IkIs I_H\$WH HHִHt@H 'HgtH3+H |'H_HHtHyHHtHOy(t A(r"H\$0H _HHXHhHpHx AVH HHHrMHOHpt؅xWLHHt,H &H茬H &39_xt HOP!DL ӹUHl$8H\$0Ht$@H|$HH A^H8LDHT$(HH D$ 袉H8H8LDHT$(HH ÕD$ H8H8LDHT$(HH D$ "H8H8LDHT$(HH {D$ jH8H8LDHT$(HH SD$ 袈H8H8LDHT$(HH 3D$ H8H8LDHT$(HH D$ &H8HHhALHH@AHLD)HHD$(T$ HH ʔ{HhLHxHAMCMCAIL 9OMCDT$0HH ICIc)D$PL$`HxLHxHAMCMCAIE3MCDT$0HH 8ICHeRIC)D$PL$`衂HxH\$WHHHHL$@ D$@HD$`LL$PH DHH\$0HD$()D$`L$pD$ $zHL$@ H$HĀ_H\$WHHHHL$@2 D$@HD$`LL$PH tDHH\$0HD$()D$`L$pD$ yHL$@gH$HĀ_H\$WHHHHL$@D$@HD$`LL$PH DHH\$0HD$()D$`L$pD$ xHL$@H$HĀ_H\$WHHHHL$@D$@HD$`LL$PH |DHH\$0HD$()D$`L$pD$ DxHL$@'H$HĀ_HHhALAHDHPHH )@HH@HD$(D$ 耂HhHHhALAHDHPHH ϑ)@HH@HD$(D$  HhHHhALAHDHPHH )@HH@HD$(D$ 耂HhHHhALAHDHPHH _)@HH@HD$(D$  HhHHhALAHDHPHH ')@HH@HD$(D$ HhHHhALAHDHPHH )@HH@HD$(D$ 蠀HhHHhALAHDHPHH )@HH@HD$(D$ HhHHhALAHDHPHH g)@HH@HD$(D$ 蠀HhHHhAL@H@AILD)HHD$(T$ HH ]zHh@WH`HD$@H\$pHHHL$HH\$0HD$HHD$(HHD$ ADHH eHL$H2H\$pH`_LHxAICMKAHL |DICHISHH dICD$ )D$PL$`lnHxLHxAICMKAHL {DICHISHH ICD$ )D$PL$`jHxLHhAICAHL |DICHISHH Ў)D$@L$PICTlHh@WH`HD$@H\$pHHHL$HH聨H {jHu@^H'HL[u=H|$0HD$HHD$(HHD$ A DHH OncH ){DLIӹ表HL$HH\$pH`_HWHH@HXHhHpIIHH|t-HH pLHfH$H vz@Hu @H'HZu_E)D$`ML$pH|$@HD$`HD$8Ht$0HHD$(D$ L ~DHH xkH yDLrӹRL$I[IkIs I_HWHH@HXHhHpIIHH{t-HH nLH(H$?H &yHu @H'HXu_E)D$`ML$pH|$@HD$`HD$8Ht$0HHD$(D$ L |DHH gH xLDLӹL$I[IkIs I_LHhAICAHL D~DICHISHH h)D$@L$PICThHh@WH`HD$@H\$pHHHL$HH\$0HD$HHD$(HHD$ A DHH _HL$HbH\$pH`_LHxAICMKAHL DDICHISHH ICD$ )D$PL$`hHxLHxAICMKAHL CDICHISHH LICD$ )D$PL$`eHxLHhAICAHL 4EDICHISHH )D$@L$PICfHhH\$Ht$WH I؋DHHϊ轢H uHuWmHUuPH\؅uBHE3Yh؅t)=s$tt NË 3H QuDLIӹɢHt$8H\$0H _H8LDHT$(HH +D$ Y&}H8H8LDHT$(HH D$ X|H8H\$Ht$WH`3HHft$@HN=H \t&Hu@ZH7H Tu:DHD$@HH H|$0A HD$(HCxHD$ .\H sDLӹaHt$xH\$pH`_HUWAVHHpHEHXHpIHHut'HM8hLH;HM8iE3HuH@L7fDuLu0E)EMMHNHLM0LEHH؅x;HM0HH؅xHM0HLH :HDLnӹ6HM0Ht HH@L\$pI[ Is(IA^_]HUWAVHHpHEHXHpIHHztt'HM0gLH%HM0 E3HuHJȞ@L7fDuLu8E)EMMHNHLM8LEHH؅xKDu0HM8HHU0H؅u)D9u0tHM8HLH8HyDLވӹ֞HM8Ht HH@CL\$pI[ Is(IA^_]HUWAVHHpHEHXHp HHst'HM 6fLH莝HM  E3fDuLu0EEEEHFLM0LEHHNH؅xyDu HM0HHU Hd؅uWHM0HtLu0HH@DD9u t2EEEEHFLEHHNHDLӹmHM0Ht HH@L\$pI[(Is8IA^_]H\$Ht$WH`3HHft$@HNMH lo6Hu@ZH7HOu:DHD$@HH H|$0AHD$(HCxHD$ >WH nDLӹqHt$xH\$pH`_HUWAVHHpHEHXHpIHHpt'HM8cLHKHM8y E3Lu0Hu@[L7fDuE)EMMHNHLM0LEHH5؅xHM0HLH>5HDLQӹyHM0Ht HH@L\$pI[ Is(IA^_]HUWAVHHpHEHXHpIHHot'HM8bLH;HM8iE3Lu0Hu@[L7fDuE)EMMHNHLM0LEHH%؅xHM0HLH.4HDLцӹiHM0Ht HH@ L\$pI[ Is(IA^_]H\$WH`nHHt)HL$paHLAHL$pnL$0HO3L$PfD$ LD$@HHD$ H)D$@= LDȋЋ衙H\$xH`_H\$UVWAVAWHPHHHIM裘E3H_XD$L$Ht)H kp H H kG`P D`H$HO ؅uVDG`H$HWXL )HD$@H >H$HD$8Hl$0D$(Lt$ z^؅t=ADDLӹ葘H$HPA_A^_^]H\$WH HHD蚗Ht@H jy HkJtH3 H ~j@ H_HH|WH=HHjWHOy(t A(6H\$0H _HHXHhHpHx AVH HHHMٖHOH4W؅xWLHHt,H i HPH i} 39_xt HOP[DLaӹHl$8H\$0Ht$@H|$HH A^H8LDHT$(HH KD$ *oH8H8LDT$(HH ,D$ GpH8H8LDHT$(HH D$ kH8H8LDHT$(HH D$ :mH8H\$WHHHHL$@D$@HD$`LL$PH ĄDHH\$0HD$()D$`L$pD$ ^HL$@H$HĀ_H\$WHHHHL$@D$@HD$`LL$PH LDHH\$0HD$()D$`L$pD$ T^HL$@7H$HĀ_H\$WHHHHL$@bD$@HD$`LL$PH ԃDHH\$0HD$()D$`L$pD$ ]HL$@H$HĀ_H\$WHHHHL$@D$@HD$`LL$PH \DHH\$0HD$()D$`L$pD$ ]HL$@H$HĀ_H\$WHHHHL$@"D$@HD$`LL$PH DHH\$0HD$()D$`L$pD$ t\HL$@WH$HĀ_H\$WHHHHL$@D$@HD$`LL$PH lDHH\$0HD$()D$`L$pD$ [HL$@H$HĀ_H8LDHT$(HH D$ gH8H8LDHT$(HH D$ hH8H8LDHT$(HH ہD$ 2gH8H8LDHT$(HH D$ zhH8H8LIxDHT$(HH D$ fH8H8LIxDHT$(HH D$ gH8H8LIxDHT$(HH nD$ 5fH8H8LIxDHT$(HH ^D$ }gH8H8LIxDHT$(HH ND$ eH8H8LIxDHT$(HH >D$ fH8HHhALAHDHPHH )@HH@HD$(D$ cHhHHhALAHDHPHH )@HH@HD$(D$ cHhHHhALAHDHPHH )@HH@HD$(D$ bHhHWHH@HXHpIHHHH2)D$PKL$`H|$0HD$PHD$(D$ LDHH 3cHL$piL$I[IsI_HHhALAHDHPHH )@HH@HD$(D$ aHhHHhALAHDHPHH )@HH@HD$(D$  bHhHHhALAHDHPHH w)@HH@HD$(D$ aHhHHhALAHDHPHH ?)@HH@HD$(D$ `aHhHHhALAHDHPHH )@HH@HD$(D$ @`HhHHhALAHDHPHH ~)@HH@HD$(D$ `HhHHhALAHDHPHH ~)@HH@HD$(D$ _HhHHhALAHDHPHH _~)@HH@HD$(D$ _HhH8LDHT$(HH ;~D$ feH8HHhALHH@AHLD)HHD$(T$ HH ~SHhHHhAL@H@AILD)HHD$(T$ HH }XHhLHxHAMCMCAIL 'MCDT$0HH }ICIc)D$PL$`ZHxLHxHAMCMCAIE3MCDT$0HH P}ICHE*IC)D$PL$`ZHxH\$Ht$WH I؋DHH'}H <[HuWmH:uPHB؅uBHE3M؅t)=s$tt NË 3H ZsDL|ӹ)Ht$8H\$0H _HVWAVH@H@HXHhIAHL\t,HHODLHx|HL$0#Hd$xHuWkHL$0Sq؅u[fD$ LMFxIHt$0H؅u/HLD$xH,HH؅uHD$xHd$xHDL,|ӹHL$xHt HH@H\$`Hl$hH@A^_^H\$UVWAVAWHPHHH|IME3H_XD$L$Ht)H XHt~H XG`D`H$HO_q؅uVDG`H$HWXL VXHD$@H {H$HD$8Hl$0D$(Lt$ K؅t=ADDL{ӹH$HPA_A^_^]H\$WH HH{Ht@H XH7tH3H WH_HHDHHHDHOy(t A(H\$0H _HHXHhHpHx AVH HHH"{M-HOHD؅xWLHHt,H *WH|H W39_xt HOPDLzӹmHl$8H\$0Ht$@H|$HH A^H8LDHT$(HH zD$ YH8H8LDHT$(HH {zD$  [H8H8LDHT$(HH [zD$ BYH8H8LDHT$(HH 3zD$ ZH8H8LDHT$(HH zD$ XH8H8LDHT$(HH yD$  ZH8H\$WHHHHL$@rD$@HD$`LL$PH yDHH\$0HD$()D$`L$pD$ KHL$@H$HĀ_H\$WHHHHL$@D$@HD$`LL$PH ,yDHH\$0HD$()D$`L$pD$ $KHL$@H$HĀ_H\$WHHHHL$@2D$@HD$`LL$PH xDHH\$0HD$()D$`L$pD$ JHL$@gH$HĀ_H\$WHHHHL$@D$@HD$`LL$PH $xDHH\$0HD$()D$`L$pD$ IHL$@H$HĀ_H\$WHHHHL$@D$@HD$`LL$PH wDHH\$0HD$()D$`L$pD$ DIHL$@'H$HĀ_HHhALAHDHPHH w)@HH@HD$(D$ SHhHHhALAHDHPHH v)@HH@HD$(D$ SHhHHhALAHDHPHH v)@HH@HD$(D$ RHhHWHH@HXHpIHHHH")D$PKL$`H|$0HD$PHD$(D$ LDHH vRHL$pYL$I[IsI_HWHH@HXHpIHHHHr)D$PKL$`H|$0HD$PHD$(D$ LDHH suQHL$pL$I[IsI_HWHH@HXHpIHHHH)D$PKL$`H|$0HD$PHD$(D$ LDHH tQHL$pL$I[IsI_HHhALAHDHPHH t)@HH@HD$(D$ PPHhHHhALAHDHPHH Gt)@HH@HD$(D$ PHhHHhALAHDHPHH s)@HH@HD$(D$ OHhHHhALAHDHPHH s)@HH@HD$(D$ OHhH8LDHT$(HH sD$ vUH8HHhALHH@AHLD)HHD$(T$ HH :sCHhHHhAL@H@AILD)HHD$(T$ HH r IHhLHxHAMCMCAIL )MCDT$0HH rICIc)D$PL$`KHxLHxHAMCMCAIE3MCDT$0HH `rICHUIC)D$PL$`JHxLWHICI[HHHAxL@II{DLH r8tfHL$HD$H)D$`L$XL$pH|$0HD$`HD$(D$ LKxDHH qLHL$HH$HĀ_LWHICI[HHHAxL@II{DLH Kq7tfHL$HD$H)D$`L$XL$pH|$0HD$`HD$(D$ LKxDHH p{LHL$HH$HĀ_HUWAVHhHHEHXHpHHHp_vH ~IHHMHMHu @H'E)E'MM7HEHD$0HE'HD$(D$ LNxDHH Bp@؅HMo"_؅LuoILH/IH؅u]HI29؅uHHFxHHHE)E'MM7ML#LHU'I";؅yHHtHH@gH'H DHDLoӹuHM HML$I[ Is0IA^_]H\$Hl$VWAVH HHHyot3Hu @H!HExHHHHL$HR؅u`Lt$HHLIIH؅uiH$A`H CfH$E3D@`@d$Ht fD9D9$DŽ$ HL$8HHD$HHH;HtFD88u=LD$@HLL$@E3HX3HL$@3HD$HHL$8E3HH;u$HtDfD9t>L$L$E3HHL$8g3H$^WuRHtfD9u D9$u1Ht$HD$8HHHtHvE3tA H "BD$0t WCH@H1\$ LH$[  $9HHȲH 'AaH)H AD$D$ LLH$H$H @HH @t$$;_QH8HHHH$3Ht\$ LH$UH$H3$9E8HE0H:IHEHD$0HEHD$(Ll$ ADG`HWXH &hm&H]Ѕx`3HEHHt HLEHHFHHHEHx9Ht4MHM@HM AHUHXu 3IH H=zE3x+H}@HtHHH@E3AE;|$8sHtHHH@ADL|g׹jHM5HpA_A^A]A\_[]HL$WH0HD$ H\$PHHgiHtHH <Ht3HHH <vHHtHHHt"uHtHSH{HHt$uHtHHKH_PH7)HHH$)HO y(t A(H\$PH0_@UATAUAVAWHH$HE H]`HuhH}pH(H3HE(ADMMHHUL=tMIHM0HHHM0|$ L LHf)hHMVHMK33H!uLM(AH ;IN@@(؅IHt I!AIu IWuE33|AH=I3r:H h3HHr*RAt!$H+H$Ht StckHu,HH3eHH?HeapH/L&HH=2r u,)E0NM@HUHM0Y3ɅtGH}LEHW3Ʌt+=s݃ty;t NË빾H}3HfHHf3ɅS9Ou WD_HH;v )tdH; .wYH *.HHH;rG<t>CHH;w HH]ZH+L$Mt AEStckLu?C;r$H-L3HtHeapL3MuM3Dˉ]P9_vdI\HRLfA94u+MDMt(HHfA9@uHtADMPMDfA9u;OrEt LmpWH]p]PfA> u-A)E0ANM@HU`HM0W3ɅtMLE`3I#U3Ʌt2=t;t NËHH}`H}3ɅDw3Eu WIHH;v pH}XtkH;,w`H 7,HHH;rN:tECHH;w HHjXH+L$L}XMtAStckLL}Xu>C;r$H+LHtHeapLL}XMuH}AEtRHMLB ft4fA;uBD  fuBD AHIA;rWDt Hf8 uBH})E0HM@HUHM0U؅xfHEHDHf8 uBH})E0HM@HUHM0zU؅xfHEHHf8 uBH})E0HM@HUHM0+U؅xfHEHLfA<$ uFH}A$)E0AL$M@HUHM0T؅xfHEHOLfA? uDH}A)E0AOM@HUHM0T؅xfHEHHHE AAHHttH;c)wkH<H z)HH;rTe73ɅtFHGH;w HHUH+H$HE HtStckHHE u_HH H;r'H(?HE 3HtHeapHHE 3HuL}XLe H}Lu3Lf9MDLf9MDHf9HDHf9HDHf9HDL$LD$xHT$pHL$hHD$`HEhHD$XLe Ld$PL}XL|$HDt$@HEpHD$8EPD$0HHD$(HuxHHD$ LLH3Ʌt8=st;t NËHuhLH}3HEhH3ۋH]DK LSqHEHu L믉]TEtKIHM0fE0E8LE0HUTHM7؅HD$0HD$(Ll$ LMoDEgHUH躙D$@}oLd$0E3 E3yBA]Wt:NtAA;t NË* HMDl$L|$H LD$HQlHHtDm_Dl$0MAIMHtdHHtOHL$P0fDt$PH\$XLD$PHU_H؅E_D$0D$0M;|LuE3hLuE3\$8 fEHuIEAMAND9l$@t'ItfE/HT$PI؅uAE3Mt+I $HtHHfD9,AuHusIjHt H$LuHL$P-HM|H -)i+#tPMtKA)EANMHUHL$@HHD$ DLoVӋjVHL$@tDLVӋEVH$XHA_A^A]A\_^]HVWAVHH@HXHhIHH*t-HHLHV UH$3E3A3EFPHL$@>H (Hu WHupHtfD97HEHHD$@HHD$HHl$ E3LHT$@HNx0؅t)=s%tt NË AHL$@H Q'DLUӹTL$I[ Ik(IA^_^HVWAVHH@HXHhIHH*)t-HHCLHUSH$E3A3EFPHL$@+=H &^Hu WHtfD93HEH4ufHHD$@HHD$HHl$ ALHT$@HNx轠؅t)=s%tt NË AHL$@-H %DLTӹVSL$I[ Ik(IA^_^HUWATAVAWHhHHEHXHpIMLH'tIIHMHIHML LHT RHM7HM,E3ADe3ED$PHM;H $IHHu MtfE9&IEHHEHHEHEHD$ MLHUHNx蚛؅t)=s>tt NË#D9euffD'AWHMnH $DˋHuLSOQL$ LSzQL$I[0Is8IA_A^A\_]HHXDH D@UVWATAUAVAWHhHLe3LEIHELHM3DFPHM9H Y##MnPIE_vAI3Ʌu SMtfA9IEIHMDMwLEϋUoAHL$0HMHL$(IHEIHEHt$ E3؅t9=tAA;t NËHMӿD}LE DuD}Q=HHtDt$@AEtWAHMH ҾHHtHMLEfDuHT$@H]H؅u6D$@A;rE3M H}AfEIEA$AL$H !|38E_tA9E0t IM]HMHtHt HXHMfHMH$(HA_A^A]A\_^]H\$Ht$WH0r#IHHt)HL$XHfQLMHL$XE3H|$ HHEADLeQй[NHt$HH\$@H0_H\$WH0HHHYQWMHuWWH b ,HuHHuZH!3H ' c"tRHHtJHL$HpDLjQHHL$ zMHL$H/{HHu떅tDLP>MH\$@H0_H8LDHT$(HH CQD$ "H8H8LDHT$(HH #QD$ b"H8H8LDHT$(HH QD$ ""H8H\$WHPHHHL$0LH PDHH\$(D$ !HL$0jH\$`HP_H8LDHT$(HH PD$ r!H8H8LDHT$(HH D$ 2!H8H8LDHT$(HH D$  H8HHhALHH@AHLD)HHD$(T$ HH UHhH8LDHT$(HH {D$ R H8H8LDHT$(HH kD$ !H8H\$Hl$Ht$WH@HHH_mIH VHHuLHNH ؅x=ELL$ HM3)D$ L$0DB&~xt HNPݶH ػDLӹIHl$XH\$PHt$`H@_HVWAVHPH@HXHhILHt-IHHLHZHHL$pH m7H)uPHOH}؅xAA)D$0ANL$@LL$0AHH%؃xt HOPH DL[ӹkHL\$PI[(Ik0IA^_^H\$Hl$Ht$WH@HHHG]GH |FH8uLHNH؅x=ELL$ HM3)D$ L$0DB$~xt HNPʹH ȹDLӹ~GHl$XH\$PHt$`H@_H8LDHT$(HH D$ H8H8LDHT$(HH D$ H8@VWAVH0HD$ H\$XHl$`MHHHEHOP=؅SLHHt,H HN>H {HM)HD$PHt H HHu H؅H)HHD$PHtLHqHH^H\$(HC@)HCH@HCHHCH@Hc3HHhHJ؅xHH3ۃt HOXdDL2ӹ"EH\$XHl$`H0A^_^H\$Hl$Ht$ WH HHH'DHd$8Hu WHu @HL$8H|$8؅x_HHLHH؅yHHH@h3#H@HtHG@H|$83ۅyHtHHH@hDLӹ DHl$@H\$0Ht$HH _H\$Hl$Ht$ WH HHHBHd$8Hu WHu @HL$83H|$8؅x]HHULHH؅yHHH@h˶#H@HtHG@H|$83ۅyHtHHH@hDLӹBHl$@H\$0Ht$HH _HHXHhHp WH0]IAHHt(HHj HLAHL$@Ht$ DHMAHtDLй5BHl$PH\$HHt$XH0_H\$Hl$Ht$WH HHH ]'tHAHu@SHHu-HN@>؅xHNxH~pt HNHH tDL6ӹFAH\$03Hl$8Ht$@H _H\$WH HWHHtHHH\$0H _H!HQH\$WH H3HG0@=DًH\$0H _@SH y0HtHǭc0H [@SH039Y0t H} @\$ @=Dى\$ H0[LUWATAVAWIkHHEI[IsAIHLE3fDeLeL}wHtOEEEEHEICHEICL|$0HT$(D$ L DHyTH;tKEEEEHEHD$@HEHD$8L|$0H\$(D$ L IDHIGx.De_H]HHU_HHxD9e_t @H]AHtH HAHe@L$I[0Is@IA_A^A\_]H\$UVWAVAWHH`HHHIM=E3H_XD}8L}Ht)H HU6H G`D`D}0HMHU0HH؅HMD9}0tQL}LEHHH؅xHOE3E3HU~*HMHH@SL}u{HH@<L}DG`HEHWXL MHD$@H HE8HD$8Ht$0D$(Lt$ 9؅)=ADHMHt HH@аDLӹ6=H$H`A_A^_^]H\$WH HHH%;<H{XHt)H QH4H <C`c`3L$E3ɍJ<H\$03H _HUVWAVAWH`H@HXHHH;E3AEH QH$HJD9@L$HL$HH$HD$0HD$HHD$(Ht$ EODE`HUXH t/HL$H4H$HHHB=L$H$HL$HFHH x3LHMM AH$'EAƃADHL$HHHH@EuHت@H  DDL"׹:H$H`A_A^_^]H\$Hl$Ht$ WATAUAVAWH0LLH'MM9H ЬINHT$hHd$h؅IN3i3Hd$ MtHT$hLL$ E3IHTItHT$hLL$ E3IHT+uHT$ IvHL$ 趩u+LD$hHND%9H;qH|$ht INH DLӹ9Hl$pH\$`Ht$xH0A_A^A]A\_H\$Ht$ UWATAVAWHH`HHHIM8E3H_XDe0Le8LeHt)H WH1H x G`7ODg`IHM8LEHHHdHM8HH@SE3Le8E3HUHOT%؅uRDG`HE8HWXL HD$@H HE0HD$8Ht$0D$(Lt$ 7؅n=ADDLӹJ8L\$`I[@IsHIA_A^A\_]HHXHhHpWH@H!3H!XHH!XH!XLH!XA3ҹQHc~=H֍K@FHHt)Hd$8AHd$0Lʼnt$(3ҹHD$  Hl$XHHt$`HH\$PH@_@SH@3H" H(J)D$ L$0t HL$ HHH@[H H%MLH#鲰@SH LYu.HsSP HtH HAhIOH PI H [MLHS2@SH LY u.HSP HtH HAPIϩH I H [̸A MLHc钯MLHrMLHRMLH2MLHMLH3MLHÙҮMLH#鲮@SH LYu1HsSP HtH HILH MI H [MLHC2@SH LYu1HSP HtH HI̧H I H [̸AMLHC钭@SH LYu1HSSP HtH HhI,H -I H [MLHc@SH LYu1HSP HtH HIH I H [MLH钬@SH LYu1HSSP HtH H8I,H -I H [MLH@SH LYu1HSP HtH H IH I H [MLH钫MLHr@SH LYu1H3SP HtH HI H I H [H\$Ht$WH HAHHxH)u@HVHeHO H6Ht HH@HOfH ~)HtHCH@HCHcHHCH@HK HcHcH\$0Ht$8H _H\$WH HAHH,HH tH3 HH\$0H _HL$WH0HD$ H\$HHHHA HH HHL$PHK(y(t A(d@tH HH\$HH0_HL$WH0HD$ H\$HHHHA H;H HHL$P1HK(y(t A(@tH& HH\$HH0_HL$WH0HD$ H\$HHH HA HH HHL$PHK(y(t A(d@tH HH\$HH0_HL$WH0HD$ H\$HHH4HA H;H HHL$P1HK(y(t A(@tH& HH\$HH0_HL$WH0HD$ H\$HHH\HA HH HHL$PHK(y(t A(d@tH HH\$HH0_HL$WH0HD$ H\$HHH~HA H;H HHL$P1HK(y(t A(@tH& HH\$HH0_HL$WH0HD$ H\$HHH}HA HH HHL$PHK(y(t A(d@tHHH\$HH0_HL$WH0HD$ H\$HHH|HA H;H HHL$P1HK(y(t A(@tH&HH\$HH0_H\$WH H{AHHzHHAHyHAHH ^tHHH\$0H _H\$WH HWxAHHwHHAHNH tHXHH\$0H _H\$WH HWuAHHsHHAHH utHHH\$0H _H\$WH HrAHHqHHAHH aXtHHH\$0H _H\$WH HopAHHnHHAH.H %tH8HH\$0H _H\$WH HwlAHH4jHHAHgHAHH (tHHH\$0H _H\$WH HfAHHlHH DtHsHH\$0H _H\$WH HWeAHH4dHHAHbHAHH `tHHH\$0H _HHL$H8HD$ 0<HD$@3HtHHHHtHHHHtHf@(H8H\$Ht$WH z)HHHu@HWHHK H?Ht HH@HKחH/)HtH\$0Ht$8H _HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pFHHx3DB(HH @~HH5{HFPHNX3DB(HH'HNPHHmcHHSbHFH aHFH@ HHt$p3L|$`Dt$hHt$pHt8HN 2DxFHDIEtLHIHI7AH0A_A^_^[HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHHt1x3DB(HH@~8H~@HqcHH@ HHt$p3L|$`Dt$hHt$pHt5HNHT$(ILH98t-HtHHAHIHt HH@I?HXIH\$hHtHHH@nHuH|$(!HHHD$(Hu Hu E3L|$P+H HLHD$PHu 辬H\$XHtHHH@MuL!|$8(I΀IˀHD$8Hu oH\$@HtHHH@LD$8H$I3D$pHL$@Ht HH@gHL$8$HtHHH@FIHHtHHH@|$xuHg\$ Ld$0\$ Lt$HIHHB܃I&I#HtH HtHH@I&WH$H30H$HİA_A^A]A\_HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pHHHt1x3DB(HH@~8H~@HUbHH@ HHt$p3L|$`Dt$hHt$pHt5HN DxF8DIEtLHI@hHI7AH0A_A^_^[@SH HHIHt HH@iH H [H%"~H\$Hl$Ht$ WAVAWH0HyMHHAH_-HSE3IAH~AEtHH[{)tHEtqHEH;8u$ALL|$ HT$PHFHHm)tH_8Hx)uHH@x)t HG H;u HH@x)t{)HDIE3HKAl}uEyHFH\$XHHt$hHl$`H0A_A^_@UVWH@HD$ H\$hHHHYH{&E3AHHO|uHHH?)tH;]tE3AHSH|uHd$`HHu3|H|HD$(H>tHu 5Hd$0LL$(LHT$pH9HHL$0Ht HH@GHL$(|HC H\$hH@_^]HVWAVHHD$0HXH:H3H$IALHH$HH9Kr3HDHL$8WHT$8HL$`bVHlHL$`;HSHD$ LLLHCHCE3H;uLHHCLHC$@tLHCH;8uLLOHCH;xuLHIMAID8X(ILPI H;IJD8Y(H;PuMHHHHHBHD8X)uHPLBIHAHCH;PuHHIH;uHHHHII@(IHHDY(IHHLI@HI@D8X)uHHHAI@HCH;HuL@HAH;HuL@LIHD8Y(u@(A(IHHDY(IHPH;uOHHHAHHAD8X)uHPLBIHAHCH;PuHHIH;PuHHHHQII@(IHHDY(IHHLAIHAID8X)uHHHAI@HCH;HuL@HAH;uLL@ILALBID8Y(;HKHQB(MIH$H3H$HİA^_^LI[IkIs MCWATAVH@E3MIHHL9auMKLIAHIE3AH;u*HPIxLL$pALt$ HHH;u&HIIHIxLME3MIHPIvxHD$pD8`)tHXAHD8c)uHCHH@D8`)t#HH H;u HHID8a)tD8`)HHDIE3HKAxu*HCHLt$ HD8`)t LE3LL$pHL$pE3IAHIwLL$pH}IE8a)tE3Ld$ E333'LL$p4IAD8`)uHHD8`)tIA H;Xu HH@D8`)tHH;tHSE3IA9wu&LL$pIAHLt$ HD8`)-LMHT$0HHHH\$`HHt$xHl$hH@A^A\_HHHAVH@H@HXHpHx IIL0@HHD$PHD$(HtmL0HpHxHpHt$0H|$pHHu3SvHPvHH?tHu HOHNHt HH@zfc(HH\$XHt$`H|$hH@A^HGH釷HyHtHRH'AH"HgH'HHGHHH駋HwHH'{HZHwCH>H5HHG H7HWHrH'bHSHHg?H?Hg H HH׸HHGHG^H\HG>HHgHH7Hg HgHGYH@H>H'=Hw3HHHHHHHHgHwSHH HH'Hg~HwHgOHBHBH?H0HHHwHGHH7HgkHjH'H+HHgHgHWH~HxHoHNHwNH;H@H:HH'H'HdzH~HgvH9Hg HHH HwvH7uHWWHHw:H':H@H'0HH HHHgHgTH7HKHt HH@sD@tH荬HH\$0H _H\$Ht$H|$ AVH LHHu @H"HL$8Hd$8ZH\$8xcH9{t/HtHHH@CHKHt HH@CH{HGMHCHfH@HHKHHHCtHtHHH@8~CH\$0Ht$@H|$HH A^Hu@ËA3HHXHhHpHx AVHPMHMu @} WHAϽ@HH;t]~Y{)tHd$ E3E333g4HCx)uHHx)tHC H;Xu HH@x)tHH;^uH;^tmH[ HtHHH@jBH\$8 fD$0HtHHH@FBHT$0I(>HL$0>HtH HAHBH\$`Hl$hHt$pH|$xHPA^HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pXNHHt5HxHxx 3DB(HH(@~PH1HHw@ HHt$p3L|$`Dt$hHt$pHt5HN(ZDxFPDIEtLHI@8AHI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HH\$HH}LuH9{t/HtHHH@@HKHt HH@|@H{LsLWIFH-LHHKHHEHCdFyHHH@8-@H\$@Hl$PH A^_^H\$WH A HHHHH(H y(t A(9HKHt HH@?@tHͧHH\$0H _H\$Ht$H|$ AVH LHHu @H"HL$8Hd$8ZH\$8xcH9{t/HtHHH@$?HKHt HH@?H{HGMHCHaH@HHKHHH>tHtHHH@8>H\$0Ht$@H|$HH A^HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pXHHt5HxHxx 3DB(HH(誳@~PH!HH'@ HHt$p3L|$`Dt$hHt$pHt5HN(DWDxFPDIEtLHI@8=HI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HH\$HH}LuH9{t/HtHHH@B=HKHt HH@,=H{LsLTIFH*LHHKHHEHCCyHHH@8<H\$@Hl$PH A^_^H\$WH A HHHHH(H y(t A(Q6HKHt HH@c<@tH}HH\$0H _H\$Ht$H|$ AVH LHHu @H"HL$8Hd$8ZH\$8xcH9{t/HtHHH@;HKHt HH@;H{HGMHCH^H@HHKHHH;tHtHHH@8n;H\$0Ht$@H|$HH A^HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pX订HHt5HxHxx 3DB(HH(Z@~PHHHט@ HHt$p3L|$`Dt$hHt$pHt5HN(SDxFPDIEtLHI@8w:HI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HH\$HH}LuH9{t/HtHHH@9HKHt HH@9H{LsLMQIFHJ'LHHKHHEHC?yHHH@89H\$@Hl$PH A^_^H\$WH A HHHHKH(H y(t A(3HKHt HH@9@tH-HH\$0H _H\$Ht$H|$ AVH LHHu @H"HL$8Hd$8ZH\$8xcH9{t/HtHHH@8HKHt HH@n8H{HGMHCHP[H@HHKHHH>8tHtHHH@88H\$0Ht$@H|$HH A^HL$SVWAVAWH0HD$ L3Hu @H9ADt$hH|$pX^HHt5HxHxx 3DB(HH( @~PHHH@ HHt$p3L|$`Dt$hHt$pHt5HN(PDxFPDIEtLHI@8'7HI7AH0A_A^_^[H\$Hl$VWAVH HH@HH"HL$HH\$HH}LuH9{t/HtHHH@6HKHt HH@6H{LsLMIFH#LHHKHHEHCt"H r HO^HGL0H_ HwHIC0HhA^_^[HHXHhHpHx AVH MIHHL9BsH~H+L;IBH;u"H/IHL3HHvPE3H9{ sLCHHLHuH{ LsrHCHCD0HtFH~ rHFHFHS HsHrHHL(L !H{ H{rH6D4>Hl$8HH\$0Ht$@H|$HH A^H\$Ht$WH IHلt+H9Q r HH1Mt ML HԊHt$8HC H{D;H\$0H _@SH Hy Hr HI蓊HcHC CH [HL$WH0HD$ H\$HHHHHHOHA HaAHSIE3HH\$HH0_HxHnH3HD$`HHL$ H)HL$ AHL$WH0HD$ H\$HHH$H4HHOHA HaAIE3HEH5HHH\$HH0_H%H\$E3HBH=LҺWIDGLEx)E3IMtD8 t HHuHtML+DE3ExPIK AI+t2HI+MLH+Mt tIHHuHu HAzH\$ALD$LL$ SVWH 3HBH=HWGx5HZHHLL$X3xHH;wu@<3@<3zHtH _^[H\$WH a3HHDB(:H5G8oHg`HHgHHg@HgPHgXH\$0H _HL$SH0HD$ HHI`HtHH@THc`HذHKy(t A(H0[H\$WH HD¹H赪HCPHtH{Ht H{Xt83H\$0H _H\$Ht$WH03HHHu@|L¹H^AH\$ H\$(H9_PtGH9_HtAH9_Xt;AHL$ AH蟖tHGH(L$ @@H@D$ HL$ H\$@Ht$HH0_H\$WH HHHu@[H"HyPtKLAHMtBHyXt;M@@HlHCHHH@Ht)HHu 3H\$0H _H\$Ht$WH IHHHMI}LHcH{PtvHCHHtmH{XtfHHHtLAHxnȅyBHCHHHtLAHUnȅyLH%sWHCX @H\$0Ht$8H _H\$Hl$Ht$WH HHHIIHD$PH^@H\$0HnPHl$8HFXH~HHt$@H _H\$WH d$8LL$8E33ҋcuE9zu:T$83HHt&LL$8L3ҋ.u H3H3H\$0H _@UHH0He(HE(AHD$ E3HݮH8%|u_!ELM!EHHM(HE HD$(E3HEE HD$ &u}uE A|Eȉ 8|HM(H0]HHXHpHxUHHHgH3HHDH k3;LdH 3Hwu=DDžuucLDDH0xPLHHx6E3H|$0D$(HD$ AQEA-HiHiHH;LL$P@|$pDCfD$THT$TD$VHH|$ LHHL$p/x-HD$pLIB8<uH {iLL$PHT$pH|$ vDH3H|$8HD$pH|$0Lt$(D3HD$ ~=\HL$pHt(LIB8|uH hLL$PHPH|$ H hLL$PAH|$ HҬLHHL$pH|jH ] ؅u3ۅuHĀA^^[H(H UjHtz H%BjH [jHt` H%HjH 1jHtF H%jH iHt, H%iH iHt H%i=ut!H zpH p%t=ttH s:%tH di H Gi H 2i H aHt H aH(@SH HHHt HHHt HHHt HHHt HHHt HHHtk HHHtQ HH [HHXHpHx UATAUAVAWHhHH\H3HE'E33=oEHLeALeLeLeLeLeLeLeDeHEE#DeHE ELLLLLLLH HLMAT$(ED$uHMqHULMLEtHM#7AAfAHEfHD$ EifA#f9AD3u ^AEAHEfHD$ fA#3f;DOtAA AHEfEHD$ fA3fA:EtHEAAHD$ fEAfA3fA<YHEAAHD$ D33HEAAHD$ D3 HEA AHD$ E3uHEHHEHHEHHEHHEHHEHHEHAątiHMHtjHMHt[HMHtLHMHt=HMHt.HMHtHMHtHULEE33ƄHMNjHtHM'H3{L$I[8Is@I{HIA_A^A]A\]H\$Ht$WH H@HHHLLϺLNLƺHE3HNLAQH= y9 H8Ɔ0H`H@H xHHƆHH@H xHƆH@HsHHu y{dž,3ۅtHH$Ht$8H\$0H _H\$Hl$VWAVH E3HL9tTH 8jj HH H jC HHH@  HL HCH7D80t]HH H8&H HH9Y^H9HTHHXH9uH Hd D0D8tH`G DHHtHLD8tH DHHHCHhHD8u1u HVHH6HrHD8v1tHCH@HCLsHHCH@HHt0LCHT$@MHMHK>rHLsLs.rLHHHt eLH\$HHl$PH A^_^ù)H\$WH 3AIdt{t^tQtDt7t$tH$K4W`,H計#HHuX4ψHHDًH\$0H _H\$UVWAVAWH AMHكdz"t HAH uD<Ju H"D$u HH HT$`IUЅL$`xAH D<u H"D$u HGH2膓HT$`IтЅD$`AH mD<Bu H"D$u HHHT$`IMЅD$`uy H,IXAH D<u H"D$u H'HfHT$`I豁ЅL$`u~ A=wDH2AH 'DH;uH$IH;tHHH$IH;uH$HPA_A^A\_^HHD$ HA4H3H$HHL$(HT$(HL$P荾HHL$Pf]H8HD$ HtHtIHHHuH8H8HD$ E3ELL+IIH;MGMtI+MtJIIIM;uIH8HHXVWAVH`3HH!XHH!XH9u3AH$A*HAVHL$HD$PH(T$HD$@HD$8HAND$0HD$(T$ H EtfL$H$L3HD$P3Hw HD$HHD$@HD$8HD$0L$(H!\$ tH$E33tubH$Ht]H$HtRH$H`A^_^HHXWHPH`HH`HH``Zj؅uOHD$`HHD$0H@!\$(LL$@Hd$ DC`HL$`؅uH8Ɓ0HtHL$@+bH\$hHP_H\$Ht$H|$ UATAUAVAWHHpHJ1H3HE3E3LLLmDmEpHEEDmHE܉EHLMȍV%EEuHM[8HULMLE[؅uD`AII 3H|$(E3E3HJHD$ uH؅t<zIE3H|$(E33ҋHHD$ su IEI`MIIL˺IMLϋHxI@ML˺H^IMLϺHDIMLκH*MNMHE3ɍWMINH;OHRHHt0M HK HCLELkHE wHs@HsHIݾIHHu3EPE8t)H;cRHt L(LhIIXM9XthIHA;rWH3wHHtAMLCz׉D$ HM xIXH'HH6I(y lA,A9w'A|у2uAxA|A4E8IE0A9A8A4E@EtHULEE33XHMHt LmȅtI Ht M HMH3OL\$pI[0Is@I{HIA_A^A]A\]H\$Ht$WH HXHt3=9D~ 0Du H 3DHXIHXHP]H@]H Ht/HHHtzJHHHtaHN(HtHHf(Hf0Hf8HFHHHFH@HfH;NtHHHH;^uHNvHHfHiHHHH8H\$0Ht$8H _H\$WH 3AII- tGt)tHwKkWA@_0HP_HHuXH@^HDHH\$0H _@USWATAUAVAWHHPH+H3HEE3ALmILmDH- tHwjWAH DHHXHHH 00Hl\H9?uH`H\$0Ht$8H _H%HHXHhHp AVH H`MIIHHLA!Au3HAH@u  HT$@IDyNPDHk\?HL$@MLHDy#PDHk[A&3H|$@t HT$@HHl$8H\$0Ht$HH A^H\$Ht$WH Hd$8H333Dv$=t"ODȍOHykZ[VHT$8HDyTODHj"[3HT$8HtHtHt$@H\$0H _@SH HHkZHH [ HDH L@HPHHUSVWATAUAVAWHHl$`HH3HEPMLH3H}Hj_ZDwDv|t'MI$IH@HuL~Mt HFXL yMo IEH;.u7IEH;.u*IIO ؅yHjDAYHFXHD$ L E3I؅y HyjHFXHHLF`HHL Aы؉E?؉EDLojHj^YAHLLH}yDHijKH~`u @HFhHD$ L E3H ؅y H\jHNXHHVpH@XLAЋ؉E?؉EDL`jHiXAHLLH}yDHRjDNpLHoj]XD v|HNXHHH@LAЋ؉E?؉EDLSjHDiXAHLLH}yDH5jAWf|MHN`HH@Hҋ؉E8؉EDLjHhWAHLH}yDHjHNXHABH jH@@L Aы؉E8؉EDL jHNh$WAHLH}yDHiI_PH3H}A9tmAWH;"w`H "HHH;rM0t1AGHH;w HHNH+H|$`H}HtStckHH}HuMAGH;r*HD"HHHEHtHeapHH}HuHEGIH,NAFtHHN`HHUHT$HHd$@D$8Dt$0Hd$(Hd$ E3E3HH@(LAҋ؉E1؉EDLhHfUAHH}y8DHhAjUDDHhlFtHHH@XHs3HtHO9HeapuH HPҋHMPH37HehA_A^A]A\_^[]LI[ IKVWAUAVAWHIIHLHALML$E3Dt$DDt$EIKEsH hTIIH@XHEwxI_I HL$hH$H$HD$ LMG IWIOhIO HL9q0HT$XHI ؉D$@D$DIO HT$`HI(؉D$@D$EADt$HIG HH ;yH4@HD$XHfD92AE3HL$h؉D$@wAE3HD$`HH$}؉D$@IIOXHD$AAHT$pH@@L `Aы؉D$@8؉D$@DLeHdRE3L$L$|$HyDHeRHL$hH$lj|$H2؉D$@DH*fRE3L$L$jIG Ht HHHtIWXA%؉D$@AAg|Dt$0Dt$(AD$ ML3IHL$Pu`=r zmt1bt&W= tJ؁NIOXHH@(LAЋ؉D$@2؉D$@DH;eiQL$AO|E3L$yH6eD9Q9$t \$@HAeA_xt\$@H\eAމ\$@HT$PHt/IIju`DHFePIO HtjL9q0tdD8t$Dt HI D8t$EtIO HI(#\$@DHduPE3L$HL$hwH$iLt$ E3E33IOhH$HĠA_A^A]_^@SHHHdOHHH@X+3DB@HL$@9fD$@K|HKXHE3LD$@H@p؉D$0"؉D$0DLWdH`OHĀ[H\$HL$WH0H3ۉ\$ H=dKOHO`Ht8HH@u$DL9dHB`OH|$@\$ Hg`HOXHtXHH@(/؉D$ &؉D$ DLdH_NH|$@yDHdNHgHg H\$HH0_H\$ HL$WH0Hd$HHcdNHOXHHT$HH@0LAЋ؉D$ &؉D$ DLcHJ_ NH|$@yHcDùN|$Hd$PHOXHHT$PH@XLAЋ؉D$ &؉D$ DLd_H^MH|$@y Hs_뉋D$P9GptwHOXH3H@(LAЋ؉D$ &؉D$ DLbHz^PMH|$@y H(c+d$HDL$PDOpLH;cM|$HuVHOXHHH@L=AЋ؉D$ &؉D$ DL _H]LH|$@y H _HOXHLG`HHL Aы؉D$ &؉D$ DL]H]tLH|$@y H]OH`u@3HHH@XH~ҋH\$XH0_HHXHp HHWH0H3ۉXHEbKHNXHHT$HH@X$D$ (D$ DLt]H\K3Ht$@yDH~]K3 L$H9NpËH\$PHt$XH0_H\$HL$WH0HHaQKHKhHtHH@HzHchHK`Ht7HH@H\ DL`H'\JH\$@Hc`HKXHH3H@(LAЋD$ &D$ DL_H[JH\$@yDH`JHKXHH@8HҋD$ &D$ DL`Hy[OJH\$@yDH`2JHKXHH@H_ DL`H*[JH\$@HcXHHH@H%H\$HH0_H\$WH HHH`IHH(H9xt)HH{HXHH\$0H _@SH HHd`bIHC0H(H H9YuH9uHHAH[HH [ù)H\$WH HAHٹHHH=`HHCHH@H H9Yu$H9uHHAH[HXH\$0H _ù)H\$Hl$Ht$WH HHH_IxHHH;uHCH;u H_ HH;u2HCH;u%H_/HH>HHH@\3/H_ HHӋCH_GH&@H\$0Hl$8Ht$@H _@SH YDCHx_GCH [H\$WH HYHZ_Dù]Gu(Ht#HśHWH9GH#H\$0H _H(H_G@H(LL$ HL$SVWATAUAVAWHELL3|$0D@|$4LH^FHL$pHL$HAtH$HuW\$02H8AtH9$tH$H8IH Xu IvhPIF HQH9x0u H9xA$HHHtHLL$HL$ID$0߅É\$`t(f|$H tW\$0Ht$PHt$@IN H9y0fD$pL|$xHT$hHI r؉D$0@ADl$4߉\$Ht$HMuL!t$0(IdIaHD$0Hu Ht$8IOLD$0HT$P 0t$@HL$0IH֝fsf~ujHHHHD$@HH A($)D$`AL$L$pDiHYHD$`H;t$HT$`Hȅy fKO3 $H|$ H'L$I[8Is@A(sIA_A^A]A\_HVWAVH@H@HXHhLH@HHy HxHHEHH;HK Ht&IDAAAHSIH@@àxZ{)tHd$ E3E333B4HCx)uHHx)tHC H;Xu HH@x)tHH;]qDH?,3HH\$`Hl$pH@A^_^HWATAUAVAWH0H@HXHhHp MMHL@Hy HxHHMMMHtH-HHu CMwIvHHNyHvLH6~)tM;wtIVHbyMwHM;wt&IV HtBAEHIWHH\$hHl$pHt$xH0A_A^A]A\_HWATAUAVAWH0H@HXHp LLA@9Hy HxH8Iu AWMu3IHHu  IELpIv~)u'HHNLyHvLH6~)tIEL;ptIVHyIELpHM;utmIv Mu 3H\$`!IaHHD$`Hu rHT$`IM;LHgAuHtHAHHE3 D|$`H|$pHAH\$hHt$xH0A_A^A]A\_HL$SWATAVAWH0HD$ HA@HY H\$pHHGLL;t2Mp HOHT$h MtIIH̜HuE3H|$`Dt$hH\$pHGLxMA)u/IT$HO M$$IOKIMA|$)tHOHIHgHOH HOHIHAH0A_A^A\_[HHXHhHpHx AVH@HIHEH@}uW.HO@Ht%LL$ ENH)D$ L$0Hl$XH\$PHt$`H|$hH@A^H\$Hl$Ht$WH HIHIHt#HtHtHN@HtLLH&WH\$0Hl$8Ht$@H _HHXHpHx HHUAVAWHhHE3HML}EL}IL}IL}HL}L}D}HMLE3HLE3HLE3HHMxLEyHVCD&HMLEdy HiCL}LEIϋD3y HCHMLE-y HCHMLEӋy HCrLE׋Iy HCSDEMϋEUDMD;ED;;A;HMHU&؅yDH.D%HMHU؅yHTDD$HU@}Iɔ؅y HtD@}D}+}3HMf9AAE3H@HHEHM؅HMDHHEE3HHM؅ujHELM'DEHUAALHEg)E'M7HH@}HM)HM3xAHD;?33DuHMӓ@8ut HMÓEt6I+DL$8DMT$0H_BD$(L$ #WHMHML$I[(Is0I{8IA_A^]H\$Ht$WH HHHʻ@uWHN@Ht HmHt$8H\$0H _H(HI@@HtH(HHXHpHxLp AWH HyMLHH_IHKyH[HH{)tH;~tHWIyH~H\$0IHt$8I>H|$@Lt$HH A_H\$Hl$Ht$ WAVAWH0HqLLH^HSISyHHH[{)tIH_IHK&yH[HH{)t3HH;tYHŀ{)tHd$ E3E333p 4HCx)uHHx)tHK H;Yu HHIy)tHH;uLHT$PLI" H\$XHHl$`Ht$hH0A_A^_H\$Hl$Ht$ WAVAWH0HyMHHAH_$HSHI:AEtHH[{)tHEtqHEH;8u$ALL|$ HT$PHFHHa)tH_8Hx)uHH@x)t HG H;u HH@x)t{)HDIHKyEHFH\$XHHt$hHl$`H0A_A^_HVWAVHHD$0HXHfH3H$IALHH$HH9Kr3HpHL$8lHT$8HL$`jHHL$`g HSHD$ LLdLHCHCE3H;uLHHCLHC$@tLHCH;8uLLOHCH;xuLHIMAID8X(ILPI H;IJD8Y(H;PuMHHHHHBHD8X)uHPLBIHAHCH;PuHHIH;uHHHHII@(IHHDY(IHHLI@HI@D8X)uHHHAI@HCH;HuL@HAH;HuL@LIHD8Y(u@(A(IHHDY(IHPH;uOHHHAHHAD8X)uHPLBIHAHCH;PuHHIH;PuHHHHQII@(IHHDY(IHHLAIHAID8X)uHHHAI@HCH;HuL@HAH;uLL@ILALBID8Y(;HKHQB(MIH$H3 H$HİA^_^HHHAVH@H@HXHpHx IIL0HHD$PHD$(Ht[L0HpHxHpHt$0H|$pHHu3یH،HH?tHu xHGHFfc(HH\$XHt$`H|$hH@A^H\$WH HpHHH=tHHH\$0H _H\$WH HtH?HH\$0H _HL$SH LAHT$0MHMHKHcHcH [H\$Ht$WH z)HHHu*HWHHKH?QH)HtH\$0Ht$8H _HL@UVWHHD$ HX HsH3H$HH3A8h)t6H˾HL$(5gE3HT$(HL$P^mHo}HL$PIIHL A8i)uILH@8h)t!MHM;AuML$MIA8i)tL$H@8j)tLH@8h)tL MAL;HSA8h)uIPHGH9XuL@H9uLLBLOI9u"A8h)tHIIHH @8i)tILOI9YA8h)tHIIHHHI@8i)tIAkLJHIL; uIIQA8h)uIPLHIAHLHHGH9XuLHHCH9uLLHHCIAAI(C(AA(K(AD8S(HGL;@E8P(H L;HJ@8i(uUDQ(@j(HJHHBH@8h)uHPHBHAHGH;PuHHHBH;uHHHHHJHJ@8i)HD8P(HAD8P(}@8i(uVDQ(@j(H HAHHA@8h)uHPHBHAHGH;PuHHHBH;PuHHHHQHJH @8i)uHAD8P(HD8P(@i(LHRHAD8P(uZHDP(@i(L IAHIA@8h)uHHHAIAHGH;HuLHHAH;HuLHLIILIHJB(A(DR(HADP(HJHHBH@8h)uHPHBHAHGH;PuHHHBH;uHHHHHD8P(uXHADP(@i(LIIHAI@8h)uHHHAIAHGH;HuLHHAH;uLLHI LIH B(A(DR(HDP(H HAHHA@8h)uHPHBHAHGH;PuHHHBH;PuHHHHQHJEP(HKyHHOHtHHOH$HHH$H3H$HĠ_^]H\$LL$ LD$VAVAWH0HYLHL;uhL;ucH[L{)u+IVH[HKM6օH.A~)ItHFH@HFHfHHFH@HFHIM;t}Ax)ItHd$ E3E333M@I@x)uHHH y)tI@L;@uLHD$`H@x)tHD$`LHT$PHLD$`L;D$huMIH\$XH0A_A^^@SH LAHT$0MHMHK6HcHcH [H H%H\$WH HhHHHtHHH\$0H _H\$WH H\tHHH\$0H _H\$UVWATAUAVAWHl$HLyE3LeoHLegAIGLM9uM9u3 HMo4AD9g HG0E3LAD9 AăHG(L3L9OHA MLEGHH MH@AJ$DŽ$HI H$H3$H$H 3$HD$xIL$pHD$hHGD$`LD$XL$PHD$HI(L$@HD$8ILMoD$0HD$(L$ AE3AILȩMLv2HLEHG(L9OHMLEGHH H@$DŽ$HH$Q$H1H$H1$H$I$H$I$LT$xL$pHD$hHGL$`LD$XL$PHD$HI(L$@HD$8ILMoT$0I HD$(A L$ AD}E3tqLMoHEgHD$PMH3HD$H3HD$@HD$8HD$0L$(Ld$ }t.HUgE33}tHMg}Leg;w El~WHMgHtd}HMoHt]}H$ HA_A^A]A\_^]HHXHh VWAWH3HH!XHH!XHBHH9uH9u3 H$|L=~AA;uzH!\$XECHEKHESHAD$PHD$HH(DD$@HD$8HH D$0HD$(DL$ L$E&|AAA;HEHHHHIHEH!\$xHD$pHD$hHD$`HL$XADL$PHD$HH(DL$@HD$8HH D$0HD$(DL$ L$l{u j|bL$H$HD$PLL|$H3L|$@3L|$8L|$0L$(H!\$ &{tH$E33{u뙻WH$Ht{H$HtzL$I[ Ik8IA__^HHXHh VWAWHp3HH!XHH!XHBHH9uH9u3 H$RzL=AA;ulHECHESL$AHHD$HH(D$@HD$8HH D$0HD$(DD$ EyA HAHHL$IHHEHEBHD$hHD$`HL$XADD$PHD$HH(DD$@HD$8HH D$0HD$(DD$ E"yu  zbL$H$HD$PLL|$H3L|$@3L|$8L|$0L$(H!\$ xtH$E33xu뙻WH$HtxH$HtxL\$pI[ Ik8IA__^H\$WH@HH3y ~H|$8H@E3H|$0H|$(3ƃHEA|$ HHPHHHHHH(H0H@HH`Ht HHHHu1HHhH|$ L LH%G~3H\$PH@_H\$Hl$Ht$WH HA3HH9,t2HBLAu.tDHl*J H8HtpxH@HtmHHtvHHtwHHHt  xHHHt xHHH(tSHH HH Htw;rHHtwHtgHH QHH H=HH HtCw;rHHt'wH tSHH HH Htv; rHHtvH$HPH HH9YuvH9HupHHXvH9uHԵHHtHHs|H@8tH{@H\$0Hl$8Ht$@H _ù)@USVWATAUAVAWHl$HHDH3HE3MH!uDL3HMM^8DXI!uHuH'NF2|HEDLEHD$ su!tH'D@uLMHDǍWEsut=t H'H!uI3 sujtH'!uLE3Ae>tOau sA<$3HU3mru!sH'DD/u AޅuIu3Ht HHtHMHtsHMH3HĘA_A^A]A\_^[]@USVWATAVAWHl$HH2H3HE3LMAH}L]3@}DG8}HMD=ÍwD-tztntbtYtMt(tDH&O6_WxI(IHMHDHQ %! AAHEDI7HD$ Q ILEpu!rHY&DzLMLEIwLuNj؅IHMHMHMHH#YuIHHHf93IHtHK9Heapu H,rHMH3H]`He A_A^_^]H\$WH@H/H3HD$0d$ H=HuUHtPpd$$L$$fD$(;u6L$(f;Hu+LD$ HH gqiuj |$ t3HL$0H3 H\$`H@_@USVWATAUAVAWHl$HLE3HL}w3L}HML}oEG0D}gAEAL(M9}u`L9@CLHA8t]H| E3HMoHt 5L}oHtH?eMt IjHĸA_A^A]A\_^[]ËuH3| 떃uiLMgHLEwP (Luw؅t=4iAE3A]\ImE3HtfD8DEgII]H@IHI3 A8uHE3I]H@E3D}gHt H0dL}LEgDMH@ADEHEHD$(L$ IAa؅_HMoHt 3L}oH8L9>uHH؅'HHHuL HEE3HEoHEHD$PHED|$HHD$@HEL|$8L|$0L}HND|$(HD$ 3t/H̓QY2=KHUoHN2u,f2H̓vQt2K}HUoHN*2LEHHN2HHRHHtE3AI\H1)Hu @USVWATAUAVAWHl$HLE3HL}HLe3LeED$8LewHMDegAEE HGHLM7LG3A9PunOODHMwHt 13HMwMtIaE3Mt I$gEt HM"Ku_AދHA_A^A]A\_^[]H9@LHA8 $t.OHOE3MM|3DSL(I9LMg LEHT؅ts=4u>A$HHGE3DoDoLMALmDHGHD˹LMLmELm\Ii3HtfL}IDEgIYEHI3ɋ؅SA8 $CI9HH9@uM3D@8HM3I9t/HUI3ɅtHUHtE3HBYH@d3AH98L}Mu A\$VHHfA9 _uH3HdH8Hu MHH*F3[u$L}E3HIXEH@32H9@u"H| NOE#DL}H9@uwDMgMtI^3HELEgDMH@ADEHEHD$(L$ I[؅HMw3Ht N.H]wL8I9uHI؅3IH9LOE3LuHEHEwHD$PHElj\$HHD$@HEH\$8HEH]MHINH\$0D$(HD$ -؃ tc%-HOHMNHD$(\$ LMC̓Q,=KHUwIN$-ub,ȋ,HOHMNHD$(\$ LMkK̓vQtN,0K&3H_GMNHGL$ LM3ɈOىOHGH_D˹LMLuH\$UVWATAUAVAWHl$HE3LHLeg3HMEED$8BIEHYALMjL9(u$H9؅tHTBIMLEH(HHj؅t H=LuUI +HHuR%+ȋ*H\DHD$ MƹC̓vQt*1K'3H؅tHZDMƹ 3Hr*t^*HHw؅t HAE33H*؅t2*H2uHEotaV3H(`LHuXfHEA̅t3DNMǻIHHfD9$PuHPA;sHL;rM$LMMtfE9!uL HDEHEgHUHHD$PHEoDd$HHD$@Ld$8Ld$0D$(L|$ )؅t8S)IMHHD$(MΉ\$ LMDHUgH~)uF+)ȋ)IMHHD$(MΉ\$ LMK̓EeMιAEIET$ HLMAHMHMgHt (LegHt H((Mt I^H$HĠA_A^A]A\_^]H\$ HT$UVWATAUAVAWHHPHEhIMLL}p3ɈMPLM@H MEAIPHH;t3HH9pt HHH;uHud 3]HHuXHHp@HH9Xt)HHH_HxH;LM@39WuSIA9`u=HG@t0AHLE3GD$ MD@ALHMLMPHLE@I3t#HLD˹M8E@t+GHGALMQzDe`AAdv6 5HUHHEpHD$0LPHE@EHD$(IDd$ 3ɋ؅t H_DMpEu8M@tOHOAmEPAdv6 5HUHHEHD$0LHEPEHD$(IDd$ E3ɋ؅t HDMEt,HOوOLEMIrEPtDMpEt H%ˆGHOA AEtuAHA9u-I9(t A90uH| LHMH Hz_HGHI΀1tH R_GAxAuFH Up$_LXILMpIjH ;_uFEp!_G,LHHMg3A!GuA?u HMhGH$HPA_A^A]A\_^]DL$ LD$HL$SUVWHhH$E3H$HH$HALD$DHt!3EC HD$E3L$C8H$Ћ ;EEuHEHGHEED9[8vvH$AE9Z vTHC0MZ(AH ȋ@$I Ë$;@t A;R rE3E3Eu HGAD;C8rH$L$A@8Ћ ;EuHEHGHEAÉ$E9X8L$I@0LAL\$PH0;3A EH$D@pEtAHXxH @HL;tA;r%^H@H$HHXxuZL$K@A@H3IYxHAApDB0-HT$PH GL\$PD$L$L3ҋ$dEHCL$LL$@MHEDH$IHHD$8LT$0Ht$(Hl$ I3ɅD$8$tFH$Eu?H$OH+XxH*HHHH?HHGG EuC($L$$A;@853Hh_^][ø6 A HWAVAWHpH@HXHhHp IHLE3AHfD9:MfE98HdH$Ht HmHIHt\HDxn)D$0NL$@E)D$PML$`LD$0HT$PH/yWIAHtH HHz[L\$pI[ Ik0Is8IA_A^_LI[IsI{Mc AVHIIHHMCAAH#D$@LD$`AHD$@LD$hAHD$@H|$pHu8H9|$`u%H9|$huD$@H!H!H!HlHt$`HWLt$hMILD$TAHVyHMD,LD$XAHZVy H_LD$PAI3Ʌus@HHHfA9LEuPE@H@HHuXU@MH."DE@E3HE3HAMfF,@HM HD$0HELl$(HD$ &?u?HE9,t2IH؅t!DH<HEu HEXAH0IHt 3HYHHMHt@Mt I @Mt I?H$HpA_A^A]A\_^]HL@SUVATAUAVAWHPE3LLh HLhLhHALAtA]2H!DùLH D9,tHuHNHLLEH$T=u>HDAH$HD$0LDl$(EHLl$ AT$L؅t!DHAL$H$\H$HTCy#@CHDb DDL$LI9<u=HhHHfE9,^uC3HED2>HHuXMIHlHE3DE3IAMfF,@HL HD$0HD$@Ll$(HD$ d<u=H D9,t/HHھ؅tDHzXAuH$AH0IHt 3HEH$HtS=HPA_A^A]A\^][@SH 3H9u H9u$A;Bt2tHH &AuH [@UATAUAVAWHHl$PHHHHH3HpMHE3D!}HM03L}AIE2H;t A_HH &ADHEu HxAE33IA؅Z3D@PH虷Lu0IFHHM8HHt HHM8HHHAHHH I{@HM0H*AAH (ADe[@HU0H9`HPH9t0H HH9YH9HHHXK;H9uHU0HD`HLE@L$ HU0H`HHM@E3D;؅EHHMxE3D؅HM8LHHUxA?؅t= > )H8uoH ڞ?H8uӍH ?t:LHD˹M Hexu LE@HE3ɍNWHeXHIHtcH;IwZH hHHH;rGOt(HCHHH;wIHHH+HD$PHEXHEXHt StckHEXu9HKH;r%H??HEXHRHeapHEXH}X<HMXL3脴HMX3LuPLu`HHEhtGHA L AHM8p؅u ;}PsHMX=  HHtH LHM0H؅L0HM0L(H ؅sHM0 xW HE8Hu$HHEt%HHu$H @u.HExL `LE@H3۹HLEHH@HHtwH;0wnH OHHH;r[6t6H @HHHAH;wIH{H+HD$PHHHtStckHuVH@HHJH;r'H=HHtHeapHHuL}E3E3Du AƉEAAEMLM7I>I;HH -3J4mIHHN(H>fN,LM0A9tMuHI袸t/LM0LHMMEF,{3HEE3HD$@LHL$8HE HD$0HHEHD$(HL$ HM0؅8Eu&LHdLE@M [EF,H?AI;u$AID;EE3} DmD;u2HExL b^LE@H7HL$ LE36LuMtjH;w_H ÒHHH;rL誠tCCHH;w HHH+L|$PL}MtAStckIL}u;C;r%HC:LHtIHeapL}Mu 7AILHDuDu D9H<@HHHD8w,ueHME3HL$@HGHD$8LHE HHD$0HM0HEHD$(HHD$ ؅D8uu AG,Dm;sHgEL5\AEAADeAuHE0HEtHE0Ht2ۋ]D;E3DmEPJDMHHM0L@HD$0HHEHD$(d$ ؅t G(HEHEуO(LLE@D$ M (HE0E239HH0H@L,HAE0@Wt0AEHPMxH`P`'uHE0;s|ADmHHEHD$@LGEHM0D$8AED$0G(D$(Dd$ (؅8EuCEHG,LLE@M De]ADmD;I9G(uDeEtHHExHHLE@HMιLEȋEPD$ 1DmAAsiHLLE@M D$ AHHjHExHLE@HLEMΉD$ 3DeLEP;Ept2t.A>tA9tA>uAAIHu؅uoHE8,tYHE0HuEHM0"؅tLE@H Dȹ$HHt$#؅u HM0 qL}DeH}XtB39}PvHEXH HtA5;}PrHEXHtHH9Heapu Hj3HtP39v!HHHH 4;rHHtHH9Heapu H3HHt-39v#H HH 4;s HMtIO9Heapu H;3HHtV4HM@HMxHM0Ht64u*HHtHH!!HH\H As1EtHM0H52HpH34HHHHA_A^A]A\]HHXLH D@HPUVWATAUAVAWHH3LH EME؉EЍPEDD@0Huh3HA9}XWoiAE33In13HcH CMr0I%1CЈEH X0A3INL}`ELMAtVDD{IHuTAH HId/@ADE@}E;rHuhL}`@3MI89t$LMHLEI3ҋ؅F8UuU98DMPHEHD$0LHEAHD$(AT$ IHUH!3ҋ؅8UU3y*3HHuXDmMHHHH HtHf9AuHu?*H3HHHt)*3H3ɉ}čW*H3HHHHu_DHEXf98KIHM3HUMtLAf;Rt?ME3ILeLMHU.3ҋ؅"HMHt H903MI<$LeUI;LcmIHHEAt`D}DAIHAHH HI/-EEDED}E;rHuh3LeEDm88u8H Oa.388u HK|H .(.3҅,L A9t$LMILEIw3ҋ؅8UuOA98DMPHEHD$0MHEAHD$(IΉT$ HUH謸3ҋ؅8UtHH9uU3(3HHHUHDmHADmHH HHU3HEXD;(tH?UI;t ^DmHEXD(Dm Dm,DMMtI.H /,EtI$,H$HĀA_A^A]A\_^]HLH L@HHUSVWATAUAVAWHhHL)p3HUωMDHuMHHf9 BuEELewD(uϋ}oHEAE98MËم[EoIy(MLjMW8O%?Hw*A9IHUϋLx88u4H .(88u HvH '8LHU(HM8E3EA@謠LMAHU8I&H &I'EH &H=0r9H H8H0r(蝍t$H@H\$@Ht StckHu&Hc8'HHt`HeapHtTL}HE LuLLE0Ifc,I̓K(HD$0HE$HD$(D$ L3uHC( LuL}MtIZ(MtIM(HtH@(HtHK9Heapu Ht~&HM8ɣMt HMH軣H P%}tI$F&HMXH3HHHHHe`A_A^A]A\]ÿWH@UATAUAVAWHpHl$@H`HhHpHrH3H 3HU`HHM8WHE@EH HEPEhE0DE4E DHEMHE(HEDMLEH$EOE33Hd%؅QHFHuPHHuXMu LE3HMhAI؅HALM@HUh#؅t=>L}@A88u5H $A88u IrH $EML}DeEtaHM(苖̤؅Le(LEHGII$H$蜤؅thI$IH@P$HMk؅L}LEHnGIIHg$<؅t IIDeEnEuHMHH!}H3]H "HM8H~#EH y"EnDmEtJmIHHtaH;k{wXH {HHH;rEqtLIwXHt*H  H脦H AG` Ag`LE33ҋe3辡؅ E3ELA~(MuVI3)fsfA~Et4LITHM0U؅A;rDmMI)fsfA~EtF3Et?LITt HM(5 HM؅u6MA;rDmAI0E;"HUHHeHDmHM8!HM@Ht!Ht6EtHEH!Hv0IuHO9Heapu Hw} H}Ht HMhIH ~}tHMPHHMHt HH@3 H H3躎H`HhHpH0A_A^A]A\]HHHD$pHD$0LL$(ALD$ LAQHHHHXDH L@HPUVWATAUAVAWH`L$LL$IA<$I;lL$3H$L$;$=HH ֦$uH @Hfd,L(H\@80A@$vDIHT$@H HHL$PD$@L$PruhA;rH$H$HD$039$H$HD$(LAt$ I$ @΋ƈ$ut$3A$I\"L(й蠪HItAHI;L$A<$H$H`A_A^A]A\_^]@UATAUAVAWHHl$`HHHHiH3HEpAHMUE(LH3WHM8MHMXDDHHMHEHM0HM HM@M MH {LEPE`EL$E33I3ҋ؅2IFLuXLHHf;E3HM`AH(؅QIALM8HU` 3ҋ؅t=$>HE888uh88u8H \snE3D88u HVbH 9s3(HLIM@ALDLeH r,IEH r3DAu*IA@=AtAu IAuIAHEȉM9MX; 3 HH3HDB DHUPE3EHH 3ɋ؅HEHLgI $Ht#f9tE3AHIӋ؅HMLML"Hnt H2I*H= E3IAt%HMLMAH؅urHM?DEHHM3ɋ؅uQCEDeHHEPADeD;eXtIIAu)I HtHyHOpH IHtHD}MLeHMt HM9H pEt IH$HpA_A^A]A\_^]ûHHXHhHpWAVAWH@HEHH3LIKH8HHSHHL$0"t\H3H;ul$8Exx3 HH3HDBxHOHysH\ 3CCHoLKLùD$ H HCH9Yu,H9u'HHAHH9pt)HHsHXHR)HT$0H_xHLD$0D(GGH_HH9pt)HHwHxH>I.H\$`HHl$hHt$pH@A_A^_H\$WH0HYAHLILD$ u!HO0HtHOHH" H\$@H0_HHXHpHxLp AWH0HHH AMHHuRȋLH(DHD$ vK̓vQtYQKGHH譐؅tHLDȹ ( 3HtHH؅t H4AE33H>؅tDLHFDHD$ 謚K̓vQt |KuF re3LHtSDFHX HHvI~HLAAFMI^D$ 3#3M7Ht HHt$HH\$@H|$PLt$XH0A_H\$DL$ UVWATAUAVAWHHPE3HHJHLuALuHLuMLuHO HEhL0D8s8tA4t`HM%HEH+C@x Hi'H;~@HK0Ht %Ls0Ds8A?AKQDm`A?uH{0*K>AEC(@A?uHMHt HeHtH3HuHHMމHSHEHD$(E3E3|$ 3SHM謉HEHME3AHHHS0Ht0HHMtQHSHME3AƄuQH{tGC(LMHDEXHMHH#S4t~HuHA;uAA?HK@C8AHMHtHMHtHHKHx H$HPA_A^A]A\_^]=Q'tA;uHK0HEHHC0HMHHC0LC0HFAMHD$ QHMh3HC0HuHH\H\$WH0HHLILD$ uHOHtHH\$@H0_H\$Hl$Ht$WH E3DHAPt uIHHH muH HH HtH H\$0Ht$@Hl$8H _H(HI͆ȃu3 3H(HHXHhHpWH0H`IHIL H IaLHHH: džHHHttu ƆƆH\$@Hl$HHt$PH0_H\$UVWH 3Hً@88HH7H|$HOL$@u)t$HH#ttu݅u tH7 39ou LJD$@9GHL$HHDHL$HH1H;tHHWuU HuI9uHX@0ƃ9PHtAHXPA 4H\$PH _^]@UAVAWH0Hl$ H]0Hu8H}@HjTH3HEz3LL3ۅtaH;_wVH _HHH;rCmt:GHH;w HHH+H\$ Ht StckHu-G;r!HE_HHtjHeapHHt[H!sHKAH EFI;IODLMHHHtHHHHK9Heapu H^%HHMH3uH]0Hu8H}@HeA_A^]HHXHhHpHx AVH 33H H D4EH9tHTHHI3HHt|M3H{Ht HH^3H[H HHǃHGH98t)H;HCHH_GH{Ht HOH+Hl$8HH\$0Ht$@H|$HH A^H\$Hl$Ht$WH HHHtHH HCH9Y H9HHAHCHu0HCHHXHtAHXPA H*rHPHuH7H;uHHuH26H HHt HH賁H见HsHHHtHNHuHgH\$0Hl$8Ht$@H _ù)@SH0HAHHHtHSH HHH ӋHDLùD$ 迏HHH sH0[運H\$WH0HhHDLD$ WHH Y,HHH fHHCHHtH RHKHau[uR0tIH aHi2t&t"H~PtDH 蚎 ƃ83H\$@H0_HL$H8DE3HuE3HAIUuD80t A3 r DHxD9DLHcHAHu DH$FEu t DHB,9t DHN9r$DHdL藍ADL$ A!LD$@HqoADL$ AH8H\$Hl$Ht$WHPI!IAHHAs_H:Hӹ菈H̤HHT$ HD$ HHu.yHd$@HT$0HD$0HtHXr us" tH 6_HHtQuHH >3HH\$`Hl$hHt$pHP_H\$Ht$HL$WAVAWH@EEHHuE3HRKCCLD$$lD$ D;t$$t)DLH:踋|$ HH;<uHH;4u HH\$(#D$0HT$0HFHD$(Hut HEHD$(H;uIEt$ tH ]H PD$ u@HH |$ $|$ DLHҊLD$`H躊|$ H\$hHt$pH@A_A^_H\$WH HHH JUuH ]+H+HH\$0H _H(Dƒu3ZHB<u HH{?Av2H f9 t)Hf|A tAHHHD뼸{H(H\$Hl$Ht$WATAUAVAWH IH3MMLHf9,puzH uϋ G;v+ύV3HLHuh>I$H?LHQ-DFfB;OIMI O1IIduIH\$PHl$XHt$`H A_A^A]A\_H\$LL$ HT$UVWATAUAVAWHHpD}hE3AHLeLLeADe@ELeLeHt6Au-HH9wl_9v "tAAu8MtA$t I؅LMXH]HLe`MtdMH}IԋhHևLMAIHm؅t=u3 H}KH}HHUXLMHMHA(Lu؅uGMAHt HI;uHI;t]ID=H!H>HtHUXI?u%HL;}tZLM[HޝMt>L;tHUIo؅uHUXLMLE؅@H똻-HEXLAAH ؅ c}HUHMHHDUXHHuX$ǀǀx|4E@u HIHH`?Ƈ8HuXWuHI؅_DHA;Hd$8HHd$0LgL(Ld$(ID$ E3HHd$8DKE3IL!D$0Ld$(D$ s4HHHd$8AHd$0HLd$(E3D$ 3Le`MtFA$HUHEfuH }tAtHUXH-uXL%AuA8Hρ؅u,A*Eu $(HEpH833HtH}@tHMtIHMGuH$HpA_A^A]A\_^]HHpHxL`AUAVAWH`EMHE3L|$HL!xȲH VL!|$PD!|$XD!|$\L$M!}$tH5蓃W DA3HELHO9uAt Hu8uHDAAH FH$HL$PouzHD$@HD$0!t$(Hd$ LL$PEIHuMLt$@IMuAu6HXHt*AHXPA KL|$HMtILt$@MtIHL$PosH U6L\$`Is I{(Mc0IA_A^A]HHpHxL`AUAVAWH@EMHE3Lt$(L!pȲH TL!t$0D!t$8D!t$tH>$~WSLD$X3H؅u>DL$XA3H؅u&HME3HIH|$ HtH)H nPH\$PHt$`H0A_A^_@SH0I!AILE;AtytHt5H O*u HdIwKI3ɄH *@u Ha*I=H *uH|AWIHtIDЅuE3AH0[EHE¹y{uHtËH W*u H i3A9,otuHkH * u HA4uHzA23A90HHXHpHx PUATAUAVAWHHPHeDeMeEDHAutrFu AH=:+++-tJH >HtMEAH DHEyWAD*uEċHyAu HЂ#D$u HނA%HAAMyH,Ih؅Eu D $D ( *uDQAu H1"$u H@AH]AAxEu5D94uHxA\$2NH/H0Ig؅!ED`u $ (*Au HW"$u HfAHAAwAHMAIEEA A>d؅o(MEENu $=(0@*u DAu H"$u HAHAAwAHMDIEA Aoc؅(MEEyD`u $j(]*)A%Eu H"$u HA HAA4vEuD8AE3HMIb؅HM؅HNLMAHU~uZHH}HHH DcHυAD u [HHUDAH mH>HtHNHUH؅HNHU!LHuXHpLMA|$ tmE3E9|$8vcIL$0MċJ HLEHHF UHO0hLEHHU* DEHO0HfAE;|$8rM$$MuD}8HNHHu HH`LA3Eu!9]u $(3AHMHeu-HHDHDsL\$PI[0Is@I{HIA_A^A]A\]HHXHhHpHx AVH L53HA#8ysHdsHds6u%t uH0!0sw LJ,tSs##IQHt1;t HAu3HtLIDH$E#uH\$0Hl$8Ht$@H|$HH A^H\$Hl$VWAVH DHH /EIAS3LD$PH@Ƌ؅u7DL$PAH؅uLE3HHtHH DHl$HH\$@H A^_^H\$Hl$Ht$ WH@HI2H3HD$8@H@ HH;CuHH;;thT%Hd$ HL$(D$(u9HT$ HL$(zx%LL$ DNjHHL$ $H HHH7 HH6H;uHHuHW@uHFHL$8H3SH\$XHl$`Ht$hH@_HHXHhHpHx ATAVAWH@3EH!XЋ!XH!XH 0CHXIE3N9$tH~KNp{WDE33H88uH1H$H FE3HL$(\\LL$ E3HT$(HH\$ 8HCHu L8L 39hv_u$Au H8AujH@HHtUL$HT$(!fsf~uHʯfH$ 3H$ t$pH$Ht HH\$xH@A_A^A\_^HHXD@UVWATAUAVAWHP3E3EHpLxEHHAutJ2u^Eu-H&9w<9v fEL$HEArHt9tGWHt tAHAeIA`H9}AieMtHD$HE3LE@HD$ I֋؅/E( (L|$HH$Eu_HEHtVuML;H 1ItHoWKdH0I]t HzE3HuHHtnLL$@EHMtZHMHtDu;HD$@HHLHD$0ADd$(Hd$ ؅uSH$AHArHt$@H$H;u%H d6 Ht$@H ƸHHtLHH؅H$ED$(LHHD$ H؅X9u,HHHDecAHGLAu M8M ;L$LD$HDI΋Љ$ ؅HT$HLI4؅!D$(EH$MHL$HHHD$ ؅9$uH$ILEu E( $HHHDEb3Mt!$tMNjHrHtH|H$HPA_A^A]A\_^]HHXHh VWAVH@H``H`H t4MAtBHaWHL$0RH ;4mHl$xH\$hH@A^_^ÍzvRus|Ӄ2uLL$pLD$`H؅t8DH a뎋aXxDL$pA3H؅9u|$puH؅u_Hl$`HEHtuIHL$0$OE3HL$0AIM؅uHD$0E3DHD$ HHHHLI[IkIs WAVAWH0HHE3 AMH969MCIHA=oHEHtu IAL$PHE0HHHuBW2Hd$ LE@E3ADD$PHHu,HH HD'_AtH$u H8H@HtxL^IIHD$PMSIRLD$P* tMRIMAz!tI;tLCHT$P tII;tHKHtLHT$PHuE( $3H\$XHl$`Ht$hH0A_A^_H\$LL$ DD$UVWHH@3HHEHEH 0ArH]WLM LEH؅tDH]`DM A3HX؅EHEH@HtuHU8HMKHU8HME3AI؅ua80tYHMLE HU=M uH0H ȋxHH ȋ;E0v3HULEDH؅upug w\HGHu H8H LM8BDE3;؅tLM8E3HdHtHHMPMH .H\$hH@_^]HHXHhHpHx AVH 3HD9q8v*LI0AI H@;AD;E8rڋE8HH;wy ;rrA;rk3HHtYE8HOHOE8L4tLL$PHE3H5t-tDD$pH 3d$ E3HuD$`HH;HL$P3H\$XH0_^]H(A;wkt`,tOtAbt3t"tulHHHPHzHqHHhH@_tPtBt4t#ttWDH+H("HHHH0I3  H(H\$Hl$Ht$WH BHH(H(rs3.HHtaHxHH RHKHS(HDFHNHHH9At)HCH HYH2H\$0Hl$8Ht$@H _H\$Ht$WH0HAHHH;tfHKHt{!tHd$ E3E333?4HCx!uHHx!tHC H;Xu HH@x!tHH;_uHGHXH{!u HVHH6H42~!HtHGH\$@Ht$HH@HGHgHHGH@H0_H MA;sw"DL+ɸHIA 9r wD+y2HHXHpL@WH03H!XHHH!H@SHD$ E3E3=u ؃zu@T$P3 HHt$DL$PHL$PHL$ LHκu F؅tHHtH'3Ht$HH\$@H0_HHXHhVWAVH03I!XLHHMH!{I!LHH!X؋E3!tAOHA؋T$X3BIHuAHՠDD$XLL$XHD$ Ht!\$XLL$XH!\$ E3HAPuT$X3HHtDD$XLL$XHD$ Hru@LWHDÍKjSIHt I&HHt H&Hl$`H\$PH0A^_^H\$Hl$Ht$WAVAWH 33IHLMM3LzHAHtAAHHH@H?H6HHHuhHQMtAFu IHHtF;3BHcHIHMHI;3~$WHlMDRHt H.H!7H\$@Hl$HHt$PH A_A^_@UAVAWHHl$PHHHLHSH3HExMLLHuH?QWMu HWHu Hy3AHMXEPDB +;I,_t_H;,wTH KHHH;rB3+t9FHH;w HH~IH+H\$PHt StckHu4F;r$H(HHHeapHHAHu 7MDHˍWt؋HM(itE3HM(LËKtE3HM(I/tHd$@HEHELEPHE}HE E3HEIHD$83Ƀd$0HE(Hd$(HD$ ˼N@}tA?3HtHK9Heapu HHMxH32HHHLHA_A^]H\$Ht$H|$ UAVAWHH H]@LMLM(Hu H?Au D;!t]t H?At H]HH~LLWIRLE(gtMRMMAz!txAu:H8H~LLWIRLE('tMRMMAz!t8H@H~LLWIRLE(tMRMMAz!tL;tMCHU(L]@tH}@HM@H9938t+LIItHЛNWH\$@Ht$PH|$XH A_A^]H\$Hl$Ht$WATAUAVAWH0H$L3MALHH$Ht u7Et0MMAIH|$ I3ɅuC8uAI;rӋtKMAIH\$ I3Ʌu8 u(I;r H4MWH\$`Hl$hHt$pH0A_A^A]A\_H\$UVWATAUHHP3I!}HLH!}LH!}H}MuHOL^WA8HULE؅uLHULMHHMLELH}؅u-DEHHE@Ht$(LIHD$ I^؅u8E@tH}t HMdH}t HMSHtHv(tH$HPA]A\_^]@USVWATAVAWHH`3HH!}3H!}E3!}PHH!uXLLu5HLEHUHULMPHMLETLuȅD}PO !uLE؍WD}eHHu !}@HM3EtsI HUXqHMXߺHMXH:HeXHHMH}LEfEHU@HxE@A;r It$fA$33HMHtҸH}t HMMtI&Ht HnyIyL׹ KH`A_A^A\_^[]t1t&= tNXNLD$SVWHHD$ HI H3H$HH3A8p!t6HHL$( E3HT$(HL$P4HEHL$P]3MIHL A8q!uILH@8p!t!MHM;AuML$MIA8q!tL$I@8r!tLH@8p!tL MAM;IRA8p!uIPHCL9PuL@L9uLLBLKM9u"A8p!tHIIHH @8q!tILKM9QA8p!tHIIHHHI@8q!tIAmLJIIL; uIIQA8p!uIPLHIAHLHHCL9PuLHIBL9uLLHIBIAAI AB AA AJ AE8Z HCL;@E8X H L;HJ@8q uUDY @r HJHHBH@8p!uHPHBHAHCH;PuHHHBH;uHHHHHJHJ@8q!HD8X HAD8X }@8q uVDY @r H HAHHA@8p!uHPHBHAHCH;PuHHHBH;PuHHHHQHJH @8q!uHAD8X HD8X @q LHRHAD8X uZHDX @q L IAHIA@8p!uHHHAIAHCH;HuLHHAH;HuLHLIILIHJB A DZ HADX HJHHBH@8p!uHPHBHAHCH;PuHHHBH;uHHHHHD8X uXHADX @q LIIHAI@8p!uHHHAIAHCH;HuLHHAH;uLLHI LIH B A DZ HDX H HAHHA@8p!uHPHBHAHCH;PuHHHBH;PuHHHHQHJEX I!HKHtHHKH$HHH$H3'HĠ_^[H\$Hl$VWAVH0HyIHLL@LWMBHM>@tMMRAz!tM@toL;u$AMHl$ HT$PICHH bA{!tMS9Ix!uLH@x!t!IC L;u LH@x!tAz!LDIRLtDLCHl$`HH\$XH0A^_^HVWAVHHD$0HXH^H3H$IALHH$HH9Kr3HhHL$8 HT$8HL$`膎HHL$`_-HSHD$ LLLHCHCE3H;uLHHCLHC$@tLHCH;8uLLOHCH;xuLHIMAID8X ILPI H;IJD8Y H;PuMHHHHHBHD8X!uHPLBIHAHCH;PuHHIH;uHHHHII@ IHHDY IHHLI@HI@D8X!uHHHAI@HCH;HuL@HAH;HuL@LIHD8Y u@ A IHHDY IHPH;uOHHHAHHAD8X!uHPLBIHAHCH;PuHHIH;PuHHHHQII@ IHHDY IHHLAIHAID8X!uHHHAI@HCH;HuL@HAH;uLL@ILALBID8Y ;HKHQB MIH$H3$H$HİA^_^H\$Ht$WH z!HHHu HSHHH?{!HtH\$0Ht$8H _HHHWH0H@HXHpIIH(qHD$@HtH0HxHXHL$`HHPf` H\$HHt$PH0_H\$Hl$Ht$WATAUAVAWH@E3LAAEM8EL$M@uH$A;uHuHALHHIILyMIL#IH@Lt$8HIPHHHH#E3H|$0H\$(DL$ Lt$8IAH|$0EH\$(E3Dt$ HHLd$8AvLd$0ILd$(DDDd$ HHLd$8I@Ld$0HLd$(EDDd$ H~Ld$8ILd$0HLd$(E3DDd$ HRLd$8ILd$0DvL|$(DNHDt$ E3H!Ld$8nLd$0E3L|$(3҉l$ EH~H 2"HHt*]HC@p!HCH@HCHHCH@LcIH I8H!HHt*HC@p!HKHIHKH HKHILcII@M98DH΋=I8Ht&I8Ht}M8I@HtI@HtTM@L\$@I[0Ik8Is@IA_A^A]A\_HrIXIQ؅lAH\$Ht$WH HAHHpH~!u HWHH?H>!HtHCH@HCHcHHCH@HKHcHHcHt$8HH\$0H _@SH HHH-HXH8HtH8Ht%H8H@HtH@HtH@H [H\$Hl$Ht$ WH03HHuH@D$ AA@LuPHLL$@HE31uHL$@sH\$ E3AHQuGHALL$@HE3HH@ѭtHE3LL$@H趭u냻OH\$HHl$PHt$XH0_H\$WH 3AI-t}tjtQtCt5t'tHK:WH6Hh-HX$HH6HH6HH-HPHsHH;u @-HHDًH\$0H _HHXLH UVWATAUAVAWHhH)pA؉uwDH3HMDF6M6#E3L}L}-tDH~L%JzAE7LhIHM'E3AEHA4$H3(EA$HxH)uHXt}wucHXH9tVI<$tO؅tDHH?A$A4$3HxHHE(D}gEL%MwA EAu H[?"$u Hj?AH?5AHM%AEgIEADD"؅8LmEuBMt=D}wD}IIt3ALE=tEwEwI;r E3D9}gu5@tD9}t H MtL9hu H1LXIHM%E3AEHA7H(EA)uIu}guBI?tHL$PY|$8HD$@H|$0HL$PHD$(E3E3H|$ 3҉|$@ߐtHL$PxYLD$PHqH`H3L$pI[I{ I]́ |) ~ ~ ~ ?/w ËH\$WH HLʃd$0HT$8Hd$8IIHuyHL$8HT$0HH@8u^Ht!L$0tHL$8HHH@Hju8L$0A=s&tt= t؁NHL$8Ht HHBH\$@H _H\$Ht$WH 3HHHu@@H HuW+HD$8HtHIHu HGfHt$@H\$0H _H\$Ht$ WHPHH3HD$H3HH9Y$u 9Y u39HILD$ 3)tHW HL$4˅e؋HL$HH3H\$pHt$xHP_LUVWHH`HEI[HHHe8HE8ICL 3DBH ^؅xxHM8H3H()ENMHM8HLE0HUHe؅yG= uA H3xDHjx DHxxHE83HM8HHM8Ht HH@H$H`_^]H\$Ht$UWATAVAWH$HHH3HHL$hE33L|$`D}HHE3҉EHL$pD}HEEEAEgAW\HoHuHwLǹW}H+HA=v HwDIvfD}>HEH+HMIHtft fHI+uHuHfD9KH= fD|H}LL$`EHȺ(tuHL$`؅HT$`LMLEйHT$pHEDE3E3[u Ht$xHD$pD|$PLML|$HLED|$@HL$hDd$8WD$0D|$(L|$ E0L}E@HEEߏ="aDy >AHL$`Ht!EtHLE3E3HL$`ԉHteH %`L3HI0oHL$hHtVHH3L$I[8Is@IA_A^A\_]TLI[IkIs WATAUAVAWHpH1H3HD$hDMCE33AHAEot AHlt;;s tt NuHGtLƹ2AFEtMt @EIIHfD9$NuQ3HHHuGuͅۍGDMIfF9$FuMHHIHfD9$FutE3Ld$0Dd$(HD|$ GEAI;u؃{uXHEt H HrHL$hH3L\$pI[8Ik@IsHIA_A^A]A\_H\$ UVWATAUAVAWHHH[H3HEE33ELmDmDHEHEXDmAHEEʼnELmED8iDLMDHȍS'uGHM؅t3=Xtt NË:0HULMLEADEHOHEHD$8ALl$0E3Ll$(Ll$ ="uKHHOHuMHOHEHD$8E3Ll$0Ll$(Ll$ AQEAZ؅t"sz7.HOHAHEML#HLL$0ELl$(L IEHHT$ HUO؅AHMHttHLE3E3|HMjHMHtHMH3H$HĀA_A^A]A\_^]@USVATAUAVAWHl$HHH3HEE3DE3HUHE LEHHEHډEAHL}L}L}H@8L}L}D}D}D}D}ZstEwE}EELMEHȺ( HM؅=ntrtm NËPHYHH@8̊EAHH4EEH@8EBEMEMHULMLE؅TH]DuHHH@8ArQAAAHEHD$83 HD$0IMDHD$(E3HD$ ؅H]AH @AHH#H fAML#H dH3ML#HMHL$PHMH@(HL$H3HT$@UHL$8HL$0HL$(HL$ Hp=uDu3ۅt&FEt-HMLMLEHUu ZEt HMLMLEHUjt΁HEE3IMDHD$0AHEHD$(Hd$ -؅9EtUEIT؅u3HMHt9}t-HLE3E3tDHnHMHHMH6HMHtHMH3HA_A^A]A\^[]@USVWATAVAWHH@E3HHMLePLeXAM MLHHU@HH@P؅u}@t WA܅HHUPHH~؅IHHu~HMPLEXHHH@8Du]HMXHtTHHUH@@&؅uBHEHHfD9$XuH3HIHtLEHH4bAHMPHt HH@ȆHMXHt HH@Ht HlHMrH@A_A^A\_^[]H\$Ht$UWATAVAWHHpHeMHeLHeLHHlM3HMtHHU0HH@P؅u}0t W3ۅHHUHH؅I^HHu HUI؅HMLEHHH@8u)HMHUEMH)EMH@HcYMuUHLEH7HH;؅u5HMLEEHMH)EMHh؅u3HMHt HH@HMHt HH@ԄHMHt HH@Ht HxHM~L\$pI[8Is@IA_A^A\_]HHXHpHxLp UHH@HeIDLEHIOH}؅t =HM8tf;t WH^e]HuPUgHXeHu EKHeHDۉ]2eHdHMDʉM HELMLHADE0HH@P\؅t)=s$tt NË 3Ht H}Ht$XH\$PH|$`Lt$hH@]H\$ UVWAVAWHpHH3HD$`L$AL$Hd$0HOiHMƹAdHLL$0DƋHH@؅t1=tt NtVt7t WHD$0Lrc8u LvcR8uMLcDHD$0L:c8t3Lc*HD$0LhHL$8D[LD$8LD$0L$II/HL$0HtHHHL$`H3H$HpA_A^_^]H\$Hl$Ht$WH HHII3H@02~t ~u Au$HHH@0u ~tHkDËHH@Xـȅt)=s$tt N 3H\$0Hl$8Ht$@H _H\$UVWATAUAVAWHl$HHH3HEHu3H!}EH!}EeLHeLewHMH}HtH!>IELEHf؅LEIHfH}׋؅HUHV|؅HEHMLELMHL$(AIDl$ H@؅=Stt NË5+LELeH3fNH}ׅxlHtgHUH{xVLM(EfEMtHUILMLeǃd$(LeAD$ IgAtvtvDuHM0{xRHM(EfEHt HU}HUHM{؅uuLeHreLEIM $؅uTLeLMcu2DuLEAI؅uEtHt HEHeHAHMHt xHt HxH}t HMqzHMH3H$HĠA_A^A]A\_^]HHXHpL` PUAVAWHH`E3AL}EL}L}L}+yLHu HAHMPHn}HMHLEIHH S}؅HMHUHH@@4}؅yD9}5HMLEAHH@8}؅JHMHUHH|؅(LMuHUItLMuIzELMԃ}@}HEƋU(HMPu@H@`y|؅t6=s1tt= t NËH@p3ۅHM3Ht vH]HMHH@ |HMH]wAH]D;}E3A5(u=s#tt E3NËE3IpwHMHtawHMHt uL}HMHt HH@p{HMHt HH@Z{L\$`I[ Is0Mc8IA_A^]ÁstkRE3-tD;tfE;9 D;u fE;9uL aH_EƋU(HMPH@Pz؅=tt  LI[EK ECIKUVWHHLA3HH!MEH!M3!MDH!uHMHMIKIISHUPDU8HUAƒHUEttHE0LHDHHUI|HEHtdHOHt[GLʉD$(LAHMPD$ *}t tu  HO(HHUDU8HuHEL*I|HtiHOHt`HEPDODHT$0AHD$(GD$ c}t tu HO(HHUDU8HuHEL}@tI| HM]jHctHEHH6LMPLEI H Ix؅HMHUHH@@x؅3҉U9UHMLEHH@8\x؅HMHUHH@P=xuJ}uDHEDM8DGHUHM HD$0EHD$(E@D$ {}t t uukHMHH@wUHe‰U;UWHMs3HMHMHH@wHeHHH3HEHt H:sHMHt HH@\wHMHt HH@FwLMMt/}0u}Ht#AHIH@wH$HĀ_^]H\$VH H HT$03Ht$0HH@8v؅uHT$0H H[+ہWH9t$0t HL$0[rDދH\$8H ^LI[IkIs WH@IIcISHAIHh@v؅u HL$P@؅uGHD$PDHWE3HD$0H!\$(D$ v؅uuE3H؅u3HL$PHt HH@uHOH8AH@uHl$`H\$XHt$hH@_@UVWATAUAVAWHPHl$ HHH3H E3LL}AEHHHL:HHfD9HUIqY؅u+LELMHUH C؅u HEIH}HXHMHt HH@\HtHHH@\H}t HMXHt$hH\$`H|$pH@A_A^]HHXHhHp WAVAWH0Lt$p33HXMHx؋I!MtStNLHH>Mt}txH\$`LL$ HH?MuuOHD$ I3HtHHH@[HtHHH@[H\$PHt$hHl$XH0A_A^_H|$ HD$`H\$`H\$T$UVWATAUAVAWHHpHuhE3L!ePE3L!eIL!eIL!eЋL!eLLELuD9epu LEP6LM`HMUpLHL$ HLu؅6EpH MIELE3Ll$0HD$(HHEPHD$ EA؅(]HHdHH@8Ws5E3Ll$0H>HD$(HHEPEAHD$ ؅EpLKL'H\AIH@KH$HĠA_A^A]A\_^]HB0HEgDuoL9G3HMDB8EHO@3H9dHU SHuϋUHE`HGHu;yȋODH->LHD$ #F3Hr؅tH5>LDȹ HO3 t HG>HO؅t Hg>HOAE33t H>L}_HOIV3؅tLEH>Dȹ M~HOHWXTHOHEHD$0L t$(E3HuHt$ HuHR E3 u EuXu EuAHMHt h E3nEtdIHfD9FuHvQAH >HGFE3u4HNAft%f,tHHfuH)v L9G8u]IHfD9^uH3HrBHG8Hu LHH#E3AMH; L}_H]HL0HOLELEJ 3t# HE= DHEIfB94`uHIHK $GHHCLEIH"uE3tuHHEDd$0EL$D$(E3HHD$ LeW؅tDH^A AHMHt@AuGH +DgHEuuAt1EIH ؅DHu< Lu_A t7"EED8gXu*Hi< w2L}_ EDeHLMAgAIH@P}F؅uHLMDChAIH@PXF؅uDHD$ EIHL}_؅t HEwDegH8AWL}_E3{^HHHD$xHD$0HD$pHD$(DL$ EL3HHLH3ZH\$Ht$WH 3IMt/Ht*u EuHyX8u HIHO AWHt$8H\$0H _H\$Ht$WH@A HIHLD$PYu29D$Pt,Hd$0DHd$(HLHK@!D$ uH\$XHt$`H@_H\$Ht$UWATAUAWHHHHe03H!]HHELH@0UDH!\$(LEH!\$ E3IHD3CtDH: HAH!\$PHF!\$HE!\$@ |H!\$8L |HD$0H0RHUHHN!\$(HD$ HHu/_LE0A׋uZDH9_!|$(MD {HHD|$ LE0Au H9HNHM3(l{( p{(7( 7vELEHUHD|$8Ll$0D$(HL$ HqLE0AtUNjHAuHP`H uQQEHMMHu&HG9D 2Ht HNHpH}Ht HMHG<E0L$I[8Is@IA_A]A\_]H\$Ht$WH A0HuHHIHt!H{HHt;HHuHK8Ht;H;H\$0Ht$8H _H\$DL$ DD$UVWATAUAVAWHHpHH3HAH}LH@0dAEDt u_]}ԻHD}D}ЋsE`t]u^H>IHAuCH#IH@0@LE@HօA3UuDtD9}@uDHIH@8@zD;t AkLE@}@H3hU؅tH7D &9}@2HyIH}@H=@E3H}Ld$(LEHDd$ E3H}H?؅t HY7MtUPLEIXH}WtDHX7cHNHE@HD$0LDd$(ALd$ LeIt RHU@HNpHEHM@Ht He@Mt IS9HtHwHH??3tDH6DeH|$(LEE3ɉ|$ IH>H}؅tDH7 }XtNHNLFE3H t&qH7LDȹ `vHIH@8>u3AHxLMH @EЉD$8EPD$0HDHD$(HDHHVHD$ $؅tH6qE39]u1t-EtLIA(UEtLEXHֹRHt H7H$HpA_A^A]A\_^]HT$USVWATAVAWHH`HÞH33H!]XHEH}@H@0|=HMHDHH@8d=DH!\$(LE@HUHE3!\$ H<؅tDH5 H}@HMXE3HL$PHF!|$HHH!|$@L lH!|$8HNHD$0J0R!|$(H}@HHD$ t#tH5 DfHUXHN{HHtsH HAHHMHv<d$@H2Dd$8K HLMHHVLHL$0HHD$(D|$ K؅tDHW5Lǹ 3H7AHMHH@;Ht H5HMXHt,H`A_A^A\_^[]HHXHhHpWATAUAVAWH0L3H!h HHMMHH@0;L$A!.A!,$IML'I)HHH,L #EAH$Hr83ALH=xs)tu?u IpR.u?t]HGH[IFH@HlLD$xH3 A&IML&3IA!$HHt@H3DtELIH*8u IA;r!A$؃Wu3Ht Ht3DH^3 lH˚HH9A3Ht HUHl$hH\$`Ht$pH0A_A^A]A\_LI[ISUVWATAUAVAWHHpLqHA3L *LHuHMHuXIKEt$HIU8E3IsIIsICH)\t$(HD$ ]@ u^7t~$HUILHHUL$IοmHHHHUA 5;wHMf#H'3HEHLMXt$@MDd$8IHEXIHtHD$0Ht$(t$ ! LE@A?uHt2D ]@GHUXEIkLE@AuHb23DH1 b HMHuXHtH$HpA_A^A]A\_^]HHXHhHp WH``AD@HHPLc(HQ8H@H)HD$ LD$pNuDH1 Hd$PHGd$HL (d$@AHd$8HW8HOHD$0H+d$(HD$ HHu6MLD$p֋u|DH1 /fd$(ALʼnt$ HHlLD$puDH1 HOH+3Ht HOHD$pL\$`I[Ik Is(I_LI[ MCISUVWATAUAVAWHH`3E!]@HEH!]HHIAH!]E3ICHI![>Du`lD}hHUHOHUHOBHHN$mMHnJLMHWLD|$@HDt$8HD$0HEPHD$(Dl$ LE@A֋ȋ8dEuIAtCHHMH4t'HUEH"LE@A֋ȋ HMHtHAH@4HeHOHHHHnHuHHMHt HeHOHEHD$(AHd$ E3H^t0LE@A֋ȋ9uH&0Dù 衿HMHt"HMHtHAH@3E@H$H`A_A^A]A\_^]H/HE/HHXHhHpDH WATAUAVAWH`E3MHDx HHLAHfD9HiLHA]IfEO;MfE%M3HMDBAHEIEHHrIEIH HHHH HHLHuXWMtyLhI;sfMIfEOwMfEatQMStC3HMDB7AHIKHL$p"3҅HMHD$@HD$0HD$pHD$(D$ DJDB3҅HL$@Ht9v HA8HA9tPzHL$xHD$@E3HD$0HD$pL|$@HD$(D$ AWEOEG G3҅BHL$@HQ9HA8$8uwHHLE3HL$@3HT$@ʅ HMHD$@HD$0DJHD$pHD$(DB D$ HM3҅HL$@H9HA9HHHHf9YuH]3p 3HHt[HL$@HSLLAHM@itHD -HHHHI Ht HHHI<3HL$@Ht 3ҋHT$@H}HIMIH@J90tLeH]LuHL$@HH]I4H9 L}Ћ\$Ht$hHL$@Ht v 3HT$@u HMQ 3҅u HL$x@ 3H]MHEt ILMHT$ IE3ҋt*Mlj|$ DH ܝD9T$`uzEt>HMa؅tDHLT$P(EfEMtHUILT$PHt$X@39\$dHUMM‰|$ H_@HLU(HEL HE3HEIHHHE HEHD$0HEDT$(HD$ LtHDHUHHuXWHt$XLȋ@HLD$PHӉ|$ _؅tDHsLT$PUuktfL JH JDHDH5JHL$8IDH JMHL$0IHD$(HD$  ؅tDH 3Mt HMD$HMHtHH3~HA_A^A]A\_^[]H\$Hl$Ht$ WH0HH3 HD$PHHuXH H`H"؅HH ~SHH3 HHQHHHHH HuYUL" HLHH̓ t'LƉ|$ DH$ 3HL$P#Hl$HH\$@Ht$XH0_HHXHhHp HPWH HHHϺ"3؅udHH HHHHf9,^uH3HHHQHHHHH HuYHL$8u"LHH݉(Hl$@H\$0Ht$HH _HHXDH L@HPUVWATAUAVAWHH3LHEDHEȋHH*oELH@0 EPHoIH@8 MpЉE3}HnIH@@ HHU ؅^HEHHHf94XuH3HNHHuX(LWHHLEHHL:HHHu?A$AGAUIEB؅jIHEPH@HAA $IуIAHMH|؅0HMHeDSMAU;s*LeIH D 9;}D+HEL$E$IL$DEHU؅HMHN4I>u;A$AGAUIES؅uIHEPH@HAA $IуIE3HMH؅uIHM5HeDSA;}sMЋUFH HUHNHEXH<D3ۉH}t HMHMHtfH$H`A_A^A]A\_^]H\$Hl$Ht$WAVAWH 3HHEHH9tH9uHHf9QuAɍADHH;vj3HHH HH HuYEHELILEHLIH HLIH Hl$HH\$@Ht$PH A_A^_HDH L@HPHHUSVWHhHH[eHHHH@8 LAeH΋IB0 E3ɉEDLMLM%LMEAAALMDMLMtGWHȉU׉ED9MgttEuH \SHMH !SHML9MouHl$(LMD$ II؅HYD st4LMII؅tUDL5HV 輊;HHfD9,_uH3HIHuXLHHAL\$@I[0Ik8Is@IA_A^A]A\_HHXLH L@HHUVWATAUAVAWHHPH_LLH@0\HU3IHEHEDHED(E3؅tDH ۉH}Hu H6HHIHH _H@HLMXHULEPH3H\$(D$ yE3؅t+MHbDȹ MRH}LmLmHLIfG9D}uH}HHfD9OuHUXHfD9BuHEIL3K6H%I$Hu LIH`EtI $MIHt HH3HHuXsM$IHH]HM@H@HHEHHO<6H ]HA0HHUHg؅<3Hu&I3KHHM$IHHuHHf9FuI $ILHtO<6I$I3I$HLIH8I $LIaHt HH]HHt HH\HHMH@HHEHHLEXII $3Ht HjHt H\Mt INH$HPA_A^A]A\_^]HuDH' ݆HuH\$Hl$VWAVH0H\LHH@03Hl$hl$`H[LL$h3DEHH@؅HD$hHHf9,Xu]3ɋH҉D$`eHHHT$hLD$`Lȋ ؅tLD$hHrDȹ \$`3HH IHtrLEHHNILHxILbHfSH[HHHHHf9,XuH3HIHuLHHHZHL$hHrHZHH[Hl$XH\$PH0A^_^H\$UVWH@HeEH3HD$83HHl$ HHu2HL$(h؅HT$ HL$(^؅utHD$ HHT$ HHf9,XuH3HHHuX6LHHLD$ HHHLHHuH9l$ t HL$ HL$8H3fH\$pH@_^]H\$Hl$Ht$ WATAUAVAWH@HEY3IH|$0ILLDH@0HH|$(D$ HDHLH$IfB9|uutFtALeIcHHuxW+L$HI+HAUA;UT$(DHXIHoHHD$0Hf9HHHtKH Ht'=H#t3H HQH!<H@HuH\$0Hl$8Ht$@H _H\$Hl$Ht$WH H33HH903HH 8HAHtRH8t63HH 8HAH HtHƋHH 8HAH<uHH 8HIHtqHH Ht_H3H$HHH94mH Ht2H#H\$0Hl$8Ht$@H _H\$UVWATAUAVAWHl$HH-7H3HEE3LzE(HHrL ZHEMHLmHEHHR8HEHD$PDDl$HHELl$@E3Ll$8HL|$0ADl$(HD$ Lm unHMHt LmHW8HQHEL HELmHD$PE3Dl$HHELl$@HLl$8L|$0Dl$(HD$ K uXNt >HUH̭Ht'LGIHH\H9GPAAEt HGP HMHtHMH3.XH$HĠA_A^A]A\_^]HHXHhHpHx AVH IHLNL3#HHtHZHHLHIHtHڬH\$0HH|$HHl$8Ht$@H A^HHXHpWAVAWH@H`DH`HHIIHHd$(LD$0d$ HE3H؅HT$8HHH9wuaH9xu[HHpHO HHGH9yu9H98u4HHAHʲH96uHl$pH\$hHt$xH0A_A^A]A\_I)I)@UATAUAVAWHpHl$0HxHHHH3H0LL=3LHUDIHHf9YuIDHE3DB:utHEfE9Dt Is븋H IHHDHAIdLHu M+IAw8HH;v t_H;'wTH FHHH;rB.t9FHH;w HHy;H+H|$0Ht StckHu4F;r$H#HHHeapHH(HOnIA( O(LG ( O0(G@( OPG`Gh\fGll:E3HLfD|_n5BHEAE3HD$ HH#؅t)DHLAOAHMHEHD$(LMHE E E3HD$ H؅t!L D$ LHAHM ZLHu!DLE HAN[A}HHHu-ƮL LE D$ HA>E3HUH F؅u$HE8sMAMIHtHO9Heapu H| HMHtMt IaH0H3h#HxHHH@A_A^A]A\]H\$Hl$VWAVH@Hd$`= H@uH @2LI˳HHHT$`HT$(HHL$ DGHDH@HuHT$`Ht H ,= uH [@u!$ $HA3Dt 0@uH 2I H\$hHl$pH@A^_^HHXHhHp WH 3A!pHV؅H ֱHHHLD$8HVH@H eD$8uu3H2D$8ut#HAuHHl$@H\$0Ht$HH _H\$Hl$Ht$WH $HHt3&A 9" u H ǰHHw8t!= H `HAHHH@X= uH Ju`fǃ8tuEHCHHP HPH˃"LXMtA@HXA AHDHH\$0Hl$8Ht$@H _H\$Hl$Ht$WH0HAH W@3HH0H /YHt @tE39$u @uHDHAHӉt$ H@(Tt$up gAw1@uu $uu$t HHHt HO@|H?Hu!$HHFH\$@Hl$HHt$PH0_H\$WH HH{Ht HK@HHu狇$H$$t 3(H\$8H _H\$Hl$WH HH ͭHHy 3H( HDEHHH@0ɮH 8 `UHD݅A~t!LH\ۍMDDM9:HHHl$8H\$0H _H\$Ht$WH HH AʬtHWE9W\LD$@3H;؅uGDL$@A3Hk؅u/H@t+D3؅u3HtH֮H  MHt$8H\$0H _HHXHhHpHx AVHP$MIHt r WH ūHHL$@(%HHtG9t HHuHt.H$LL$@HD$0\$(DHLt$ 襯DHWDύK_8H  BH\$`Hl$hHt$pH|$xHPA^H\$Hl$Ht$ WH0IA؋Ht^LL$HLD$ uDH[H7W0H { LDËH H ^ H\$@Hl$PHt$XH0_H\$WH AHt tH=7WH  Ã3AAutxxAut44r||u$$Aut H . `3H\$0H _H\$WH t u[tVHHH7u 0u  ut HHH;uHHuH\$0H _H\$Ht$WH HH SAzu u SH# (tHɪH H\$0Ht$8H _H%0H\$Hl$Ht$ WH0IA؋HtbLL$HLD$ uDHӿH4W4H L͋DH%H jH\$@Hl$PHt$XH0_HHXHpHxAVH0IMLHL@.tDHnD4HL$(AHAHA@H3H\$@Ht$HH|$PH0A^̋̋$HH\$WH 3H\$0\$8HHHT$8HHH@Hԧ8\$8tXHHT$0HHH@P\$0u28t*ÉutH\$@H _HAHHAH̋2tu8HAHH\$Hl$ VWAVH@MAHt t"Au[t tIH LL$hLD$`HtBDH2H;DD$ 1WmIuH{1W9ILt$0dHT$`DˉD$8DHD$0D$<HHD$ H *\H\$pHl$xH@A^_^H\$Hl$VWAVH@MA؋HtkLL$hLD$0tDHۼ0<H ƣHT$0DLt$ DHVH sH\$`Hl$pH@A^_^@SVWH@HH3HD$0HHT$ IA+uLL$ DƋH HL$0H3 H@_^[HHH3H%<HHXHpHx UATAUAVAWHhHHRH3HEHuoMHEwMHuLHELHuMu MLMLEHURu H}9HMH,AHUEA t39u'HMLEٚHUt<JMtBA3uA;FuAE3MtBA3$u uD@E3Mt!BA3uA#GA;Gu u3Eu uEtsHzEt,HEϻ8u)HHH< H AہÇHt&ULHMDHE|=t;uHuH}gHLMILEHUęfe}HMHt{AHUEA q339]vXHMLEHeEt/HM9u&Au HHt HE9Ht ;]s EULMHMAHu 3 HMH3L$I[8Is@I{HIA_A^A]A\]H\$Hl$Ht$WATAUAVAWH@3MEDH9YL$HHDJ,HM@EEIMuAVHEDEHD$ $HEHD$0DEH\$(Lt$ t ;~rՙL\$@I[0Ik8Is@IA_A^A]A\_@SH@3HD9t H ru3=H{tILL$0Hd$ LCAD$8HT$0D$<H@[@UATAUAVAWHPHl$@HHHPHXHH3HLDHhILIH`HUhHpHU0HxHUHHHUX3LEpAHE@H]8HMPHu HuDHtELEHUHU(u$tAtAHu‰EE EtHM(u؅u_H]83HDB`CHE@HDžHDžDžHAAHAAHH M+uL}(Mt ICMtIN9Heapu H-HtHN9Heapu HHH3 HHHPHXHA_A^A]A\]úHMxq3Ʌu 2Mt_HtLLHE@HtLLHtHHD|$8HHD$0HHD$(HL$ I؅IEE3HEL9gWLM`HMPLEL؅ED9eLe`CE$AIHHHM^E3E EufI A@tZD9Et%H:HtHIME3AEȉMD9E t)HE(Ht I HHI̛M E3AEȉM IHULD$ ALNjx؅AD;}FE3AH AAD}L9e8tD9uD9eEDEtDH xHt8HMiEDm$LE HULd$ ؅=D9e tAL}(IL}$EDm$LE HULd$ 訹؅D9eu DeEtDmLmHHELe0E3DsL9ED9Ov{HGAH HIE3AuMt MtHAL9 t5D@AIHA@tAԋHL9 uLe0DD;wrAEH A\E3EAtbH;!wWH @HHH;rD't;CHH;w HHrH+Lt$@Mt AStckIu7C;r!HLHtHeapIMu uAIEHAHHD9g3H9tGH M΋QD$HOHH#EhHD$ C3ҋ؅HAAHH9uE3Au:HE0Ht1HUHHt(DHOHT$ M΋PEl$؅AEH ABE3HMxMAu =pEuL9e8uL9e@t f MzIH}pH4) HEPD90TItZH; wOH +HHH;r<t3CHH;wIHdH+Ht$@Ht StckHu5C;r%H HHHeapHHAHHDHDGDl$0Dl$(HD$ E3HMxLAǎLEDe3HMxAu~؃zuXU3AAH}XHHuXAEE3El$hLEHHMx=u#SH}XtHHt L'hD9eEW̸D;uDNHHMLAt8LL$xHDD$8ILD$pHL$0IHD$(H$HD$ HHHHLI[IsWH0I!IIc IHHIKE3A/DE333E3EtAt Au HHLǃtatNt#HtLHtqLhMtMHtL@HtKLBHt=L4HtLHt#L@HtL` MtM@LL$XE3HT$ ISHL$ HL$XHH\$@Ht$HH0_DE3EtjAtAuxA+tlt^uiL`t8t*ttuGL>L@5L,L#L`tuLL@IH\$WH Hd$@HH rLL$0LD$@HpLD$@Mt HXH =oH\$83H _HHXLH L@HHUVWH0E3DT$ IHHu.H|$Pt HGHHHtH|$hHuH _WLHuDH8WLu"xH QЉD$ HT$`LAH#|$ t H Qt7H?u1t-HD$PH@HHtLD$`Lϋ؋H\$XH0_^]̋$H(HH;u HH;Bt(論H(@SH HH Ht݋H#HKHtʋHcHKHtHcHK(HtHc(H [H\$Hl$Ht$ WATAUAVAWH`3H$IILDH8M/M1M#HDGIH1qu73DG8HL$ H9>HT$ HULt$0DHHfA9HcHItuk{ALD$X;~42t,IIHcHIGuA>߃t_2AH\$PHl$`Ht$hH A_A^A]A\_H\$Hl$Ht$WH D;AAA HGyH9AP3H{HHuFHHt5DC HIzH Ht{L HLù; LH3LH! C3H DB C C;tL +DGIII G~HH,C3H\$0Hl$8Ht$@H _@SH HDҋCAJ;tL A+D@IIK }KKHH$H [H\$Ht$WH H39qEQ3xzHHt9wuf0DGHHAHt$8HH\$0H _@SH ٺ3'zHtH [̅t%=uy ɅuOH\$Ht$WH I IH @f9u HIHuHf;f A fAuDHӜA WA@fAt HAHHYHt_H{H;t{{DHќHT$0zxf|$0 uH3(DL$0HD yЃWH\$8Ht$@H _HHXHPWH 3L@HXSBt_BH؜]LD$@D$@HBt/BH-H9\$8t5LD$8;HBtBH)D H\$0H _H\$WH 3LD$8H\$8S +BtAH( C9\$8u=LD$8D$8HBteAH. DW H\$0H _HT$USVWATAUAVAWHl$HE3Lf9 L*t WHILEwLmwHHH/}AAD}gEDžu.D`HMwLMgAHH@h|؅uDEgLeox4 DLE}QxHHu@HwxHMwAIHt HH@|HĈA_A^A]A\_^[]DmoWD}gELmEHMwLMgEAAHH@hE|؅HMyxHMwHULl$@L}Ll$8AHT$0HUHHT$(UgfD|$ H@0{؅x5LEHHUowEo؅xHMwAD;sD}gMHMwI4$@SH HٲH f0z4H SzH [LI[IsWH@HuH3HD$8H3IKIsw؅u6HT$ HL$(|w؅u HT$ IIfB94BuE3H8H9t$ t HL$ qHXA^_^[H\$WH H$tHHH\$0H _HL$SH0HD$ HHKZHHHtWHH0[6H\$Ht$H|$ AVH HHH&LA&H'0uHD$0HHt%H`H` @LpHp(H؅uDx HMHQ>؅HMD@hI>؅EuHMI[=؅}HMI=>؅gEnH HD$XHHttLhLhLhLh Lh(L8L@DHHH0HXH#RL`LhDpHDDLIHu HtHE0HHQH#6AA;HAHOzcH.DuA;t Hp7DD9ptHOPcH.AE;HD9H@HhHMDFfI<؅HMDFgI<؅H_HD$XHt%E3E33HHA@BIHu^NHE0HHQHt Q@,H8t WHt-HHH9gHtHHH gHl$`H\$PHt$hH A_A^A]A\_HHXHhDH VWAVH03AH!xHLDG D@ HH\$pH3HIN8HD$XE3HD$ E3 ]u!_HD@"F3HD;`HHtvLAHAHbHL$XD6E3H]uU_HƈHL$XLL$hd$ Lú\u%_H`3 3)WHL$XHt \Hd$XHt H_Hl$`H\$PH0A^_^H\$WH H$tHHH\$0H _H(H%MHHGHIH;tEH(H\$UVWATAUAVAWH0E3HALl$pLl$xL9i BD9i(8H H9Ku7H@?HCHux@HRfD(s,AE;s(HC L4MA HHKH@H5dHȋC=,t==/t/=v=v=t=t=t A HGMFLL$pHcHL$pu D< =Ht dLl$pHCLTJLc+EJ xr= u =z=zHCJ xHHfD9,AuELHCLcA+J pH HD$ = u=zu&=ztZHCJ pHHfD9,AuUUINHT$x2_@uLD$xHh*H7s,HAHt1H H;t%fD(HL$pHtcL9l$xt HL$x^H$H0A_A^A]A\_^]@SH0a,LA(HLI A HًQHIH@ buHHH@aH0[H\$Hl$Ht$WATAUAVAWH 3Hىy8H9y 9y(AH9y0u1HҹAHC0HuHN@x)HK0M3L{0s,~HK0IGIH;wwHC L4MthAt^INYHK0IDLeML;wLHH HAAHH(31HPHD$HHtHHS.H3HHHD$HHtHHHg@H3HHHHD$HHt)LHH H@HH3xHKHHD$HHtXLHH H@HHǃ:ǃȯǃx 3HtCH$L$(Ht$ DEIHH@8\tHHH\3HL\$PI[ Ik(Is0IA_A^_H\$Hl$Ht$ WATAUAVAWH0E3IcEHA3wHE|$HrED9OPt'HHO`H@0u[GLHG`<OH>D9gPt8HHO`H@HH[HHHH@01[GL<GHA@uHO4pWt\LiuH$Ht@GD6WSD9wPuHO`<GDG4EvC"t>H9HD$`Ht L L`D`IHG Hu DwPHL5L#Iֹ0HD$`Ht*HL`HHH BH@L` HX(IHHtEw DlEOPDt(ttttuG(@ Dg(G(D9g(t3HcO(HHIH@HHGHfD IֹHGHfD $ƇD9gPt'HLOHO`AH@Yu}"PtGHkLOHO`AH@XuGLGHHfE9$HuHG HLHHH$LOHO`AH@Xt&L|AtL|AH\$hHt$xHl$pH0A_A^A]A\_̸ ;wBt8t.t$tt uLHA4HADHA HHAHAH|Át7t*ttt3HAxHA|HAXHATH̃ttt3AA AAAHHXHhHpHx ATAVAWH 3IHDsMu AYW-IAD;QE+E+7AAE+t8AYH)AL$(wHHHXDpHGLH0IHHlHXDpHG4HAH"=HY(HY HHt'uALyh0HIHHHXADpHGDHAHIDHA(H>HY HHQ8HHHG HAH;HYDqQ8tHAHHf9huAH0CHHtjHG>8tHAHHf9huAi(H0HHt*HGHYH`<DqHAHY(HcHHHA HHLyHA9u 9YLuADAHS0HH=HXHDpLxHX HX(A jAAAAtLAt 2uHƬ0HH7HXDpHGxHAH9H0HHHXDpHG|Hb0HHHX@HGXHAH:_H&0tHHHX@HGTHAHY(H8;HH^HXH@8DpHHAHA0HA(L HLa 0H0Ht+H MwHXHJ:HHHDpHX(H@ HHH9ADHl$HH\$@Ht$PH|$XH A_A^A\H\$Hl$Ht$WATAUAVAWH@3EHHHuZW@HwhL-y3MPE>uAtBPuAt6HAH׳HH@bREALHHCPLR؅u1IHcHrODHT$0<HG4D$0NHcATBu H5vuH5vHHH@QELLƋHD$ @CtHv@rL\$@I[0Ik8Is@IA_A^A]A\_H\$Ht$WH HڲHAH3H@0]QuuMHHH@H=Q9uu 9tHDËHH@XQHt$8H\$0H _H\$WH IH;H@5HH\$0H3HHfHHHHHH _H\$WH H$tHHH\$0H _HL$SH0HD$ HH4HH<HHttIHHH0[_̋-tetW-tJt<t.t t^H:H1H(HHHAPHH̋-t0t%ttAAA AAAAHHXHhHpWAVAWH@D$AH$HDpHhE3u 4u?Hu1uWLsֹ@ H\$`Ht$pHl$hH@A_A^_ED8"H˯LL$0HO`ADAL|$0H@;NuHL$0HtHPu DFHqLL$0HO`AAH@MDuHL$0HtGHr,tK tMtt<t>u%ftttt fD̸H\$WH H3HHtXHm诼HHu @8tKLMt?MH0(HHIHHt<D.UJFHHtǃǃUHHt螴HHHDϋH\$0H _H\$Hl$Ht$WAVAWH E3IHAMu AiWAM1A-$-=t_t 9%H85HHLpHHL 20HH0@HH(L9LLx D8tHHHfD94XuHr0HHLp@HHH 2Lp(HHcHHH `H%8sLHt8HL y/HcHHHH0HH(HLp@LHP MLD8tHHHfD94XuH0HH+H|0ʹHH@LpHHH (0nHC0葹HteHNPH'0uHtIHH0VHt*H@LpHHH .Lp Lp(HIHL97u2AEH\$@Hl$HHt$PH A_A^_H\$Hl$Ht$WATAUAVAWH0ELLFL-mp3IA~Pu?t5II΋HbH@HDALIHCPHuHHcHr;IIHcH@ATHH oL{mHD$ D @H\$`Hl$hHt$pH0A_A^A]A\_H\$WH H$tH_HH\$0H _HL$SH0HD$ HH+,HHt Ht AHKHcHH0[H\$Hl$Ht$WAVAWH E3IALAMu AYWM9AdAhAiD8tHHHfD9UL9>u 2EHl$HH\$@Ht$PH A_A^_̋ƒdtJt<t.t t\H+H"H HHH̋ƒdt0t%ttA A A A AAA@USVWATAUAVAWHHhHőH3HEHEhEDepHDd$(HHD$ ^HNH[HִE3HFHtLúHv AFD8u8H(H=Of聴HHuxfD(A"H+LHN`AiAH@DLmLuEdAEeEfEgEhHΥLMEAHN`H@NDu;L}Mt2AHAHMHt>LmHcIHrHMH3藲HhA_A^A]A\_^[]HHXHhHpHx ATAVAWH0ELHeu{L%j3I>it-HDDLHAIH@PCuHHcHs.HcHADHD$ L(h׹@H\$PH|$hHl$XHt$`H0A_A^A\H\$WH H$tHHH\$0H _HL$SH0HD$ HH&HHt Ht<趪HH0[@HHXHhHpHx AVH E3IHAMu AYWAM1- t~t D8tHHHfD94xu2H=0英HtpHHHH (HHcHLpHH @Lp(CH0EHt*HLpHHH *H@Lp Lp(IHL96u 2EHl$8H\$0Ht$@H|$HH A^̋- tNHH̋- tA AAAHHXHhHpHx AVH0l$hAhHHD$`HD$ E3D8u3H豨HƘANd HHuxdA4!HcHD- tt HYHHDHD$ Lŋ׹@H\$PH|$hHl$XHt$`H0A_A^A\H\$WH H$tHߦHH\$0H _H\$WH H(H "HHHtHHtg8H'HHg膦H(HHcH\$0H _H\$Hl$Ht$WH 3IHMu}WAI)+-W-tBt <H0THHHHH "HՕ8#HHHhH$"HHHH0H HH(HP H@H0ЬHHHHH %lHT0袬HtnHMH20耬HtLH+H8^Ht*H(HHH S"Hh(Hh @HhHHHH9+u 2EH\$0Hl$8Ht$@H _̋ƒtN-Wt>t0-t tXH.H%HHH H(HHHXHhHpWAVAWH@$AhLH$HHD$ E3#"HғH"HD$0HHt L8LxDxIH(HuyD8HSHHfD9tAHLLH(EIH@P7uIHcHr=HcA4t H6HDHD$ LF\׹@H\$PH|$hHl$XHt$`H0A_A^A\H\$WH HH3H.LH HHHLHLJHHHHHHLJHHH H@L(H0LJ8HHHPHpH\$0LXH`LJhHxHMH _H\$WH H$tHHH\$0H _HL$WH0HD$ H\$PHHHHX_H(RHH\$HHNHHK0蚝H)HHH\$PH0_HWAVAWH0H@HXHhHpIHE3AMu AiWM9A-5}t-  t *H،0&HHD$hHtSHXHH"H9BuHyHy0HBR4L{CH{L{(H HH HHHC IkH_8譣LHD$hHtXHHHHB3HcHHHB3M~AFIFIN0IN(HsIHIF HML6Hދ0,HHD$hHtSH(HH !H9BuHyHy0HBX3L{CH{L{(H NH HHHC ItHh0趢HHD$hHtSHHH H9BuHyHy0HB2L{CH{L{(H H HHHC IHH8:HD$hHt{HLx@HHHH0HH(H'HUHP HHH0HD$hHt*Lx@HHHLx Lx(H HIHL9>u 2EH\$PHl$XHt$`H0A_A^_̋--  tttIt/EHXHH9Pu H`zHqHHH@H%R1H(HH9Pu H0?HX6HHH9Pu HHHH̋- t"tt$A AAAAH\$Ht$WH0D$hAD$(HHD$`HD$ tE"tsփt~tpttxtjt\uHX؅u3"t.UJ *HHuHnU@X蹻Ht$HH\$@H0_H(HH̋P9Tu09u"9u9u3@SH HH(HH@K/HXHH@7/HHH@#/HHH@/3H [H\$WH HHO3HHH HHHHLJ,HHHHHH\$0HLJ/HHEH0H8 H@HHH _H\$WH H$tH/HH\$0H _HL$WH0HD$ H\$HHHHH@tHt'HHHt#'Ht躕HHHt評H0Ht HHt_'H'HgH~H HHH\$HH0_@VWAVH0HD$ H\$PHl$XIHE3AAMu AiWM10D;;A-,tD8tH@HtHHfD94Xu@H0HHD$hHH@LqAHALq(H?HHcHHA HZ8訛HHD$hHtgH0LqAHAH;H0kHHD$hHt*Lp@H HAH=Lq(Lq HIH)D8tHHHtHHfD94Xu@H0HHD$hHtHHA1{AeA  AA>H30聚HHD$hHtSHHH_H9BuHqHq0HB*LsCHsLs(HHHHHC ItH0 HHD$hHtSHHHH9BuHqHq0HB7*LsCHsLs(H-HHHHC IHHA0菙HHD$hHJLp@HFxHALq Lq(HH#;KH0:HD$hHt*Lp@HHHLp Lp(HHIHL97u 2EH\$PHl$XH0A^_^̸0;wRtD-,t/tt t H@H0HH HH1trv v\t.uHH?H9Pu HH@&؅UIHIHHfD9H@v&؅M9>HćLHHO`MM>A0H@9&؅M9> tGt t=uH؅H؅utHdHIֹTH@HuHYK@b*IfD8HHHu HtKfD8Hl$hH\$`Ht$pH@A_A^_̋9u9u3@SH HHHH@$HHH@$3H [HHXHhHpHx ATAVAWH0ELHL%K3IHUDLHAIH@Pp$uHHcHr=HcHAH !IHD$ 1LHDˋLE@蘰H\$PH|$hHl$XHt$`H0A_A^A\HHXHhHpHx ATAVAWH0AELH2uy)txWoL%s3IH\DLHAIH@Pw#u Hr)AH͋DHD$ LG׹@路H\$PH|$hHl$XHt$`H0A_A^A\H\$WH HHcLJH 3H]HH HHHLJHHHHp HHLJHHH H8H(LJ0H@HHHPXHxH\$0H`HHhLJpHHHW9HHHHHHH _H\$WH H$tH迉HH\$0H _HHHWH0H@HXHp HHH3@8HtHt2HHt# HtDHHt3HHtH HtH3HsH HHtH HtH3HsHH`H\$HH5uH3HK0HPH H\$HH3HK0蟈H.H!HHH\$PHt$XH0_HWAVAWH0H@HXHhHpIHE3AAMu AiW8M9D;:D;AD;MAAAD8tHHtHHfD9HHD$hHHLyAHAHA0HA(H$HUHQ HHv8HHD$hHH\Hgv0赍HHD$hHtgLx@HHAH;H*v0xHHD$hHt*Lx@HHAHLy(Ly HIHD8tHHtHHfD9u 2EH\$PHl$XHt$`H0A_A^_̸;tv;tevO;t;v%tHHHHHHHHÁ  tZ t.tukH`H HH@H%HH/H9PuHH HH H9PuHHHAx ̋-tWtLtAt6t+-qt@ttiA'A!AA A A A AAALI[IkIsI{ ATAVAWH@H$AD$HE{IC谼E3؅"DpH-pAHHD$0Ht L L`D`IHHu HI轇HD$0Ht L L`D`IHHtD8 HOyLL$0HN`AALd$0H@؅^HL$0HPHyLHN`MLd$0AM&AH@o؅IHHHHfD9$JuHLHMAHAHHHxHN`M&H@ ؅IHHfD9$iuHLHMAAHHhH)xHN`M&H@؅HM9&?HwLHN`MM&AAH@r؅ M9&t_tCt&ttKt/tHH؅{H`γ؅tiH 跳؅LHչfHHu H <THfD @HHu H5<.fD L9u0UJpHHuHM<@Hl$hH\$`Ht$pH|$xH@A_A^A\̋9u09u"H9Lu9u3@SH HH`HH@HHH@H HH@HHH@3H [H\$Hl$Ht$WATAUAVAWH0ELLVL-I;3IAu?u-IHru}DLHCPAIuHHcHr@HcIA\>ELH 8HD$ LX8LD@H\$`Ht$pHl$hH0A_A^A]A\_HHXHhHp HPWATAUAVAWH0AEL(ttpWL5'c L5%c3MAIHZteELHCPAHL$hu I;r(AI/E L\7HD$ @H\$`Ht$xHl$pH0A_A^A]A\_HAHQHiuH;uHHfHH$L3H}A HIH$HHtJH$3H·H} HHH$IDH:1@HtHHH7tL<1ӹ@蜔L\$PI[ Ik(Is0I{8IA_A^A\@SVWATAUAVAWHHD$pH TH3H$EEDD$`HLH$HD$P3H\$XHiHH@0DD$@H9\$PusWH0@-HD$XHD$0H\$(D|$ EEHI/7L|$XI4D=H^_HvHHD$hHt HXHXHH|$hHuwLZ0ֹ@RIDuJAtDHAEԅu3A1t-H\$HHLH}AD HHIHD$HHGHqH\$HHLH}AD HHIHD$HHGBDB4$H$HD$PLhI}MA8_1u8LHWAH$‰AEtH?H8_1tHD$PIEtkM;uu%H$HL$ MAHT$xHA8^1tIN4I8X1uHH@8X1tIF H;u HH@8X1t8Y1HDHAH$y%H$HD$ MEH$HL$PKHH\$hDl$`Dd$@t$@L|$XH|$h;H.@覐#dt+DH-@苐AHtHlMtIIHtL.ֹ@H$H3 sHİA_A^A]A\_^[HHHWH0H@HXHpHHHH02HNH)HNH#HN0HiHH\$HHt$PH0_HHXHhHpWAVAWH0HLqHQ HYELpEHXDA(HHH;uIH9F EHHtL-׹@H\$PHl$XHt$`H0A_A^_̃uHA0ÃuHAH3HHHWAVAWH0H@HXHhHp LH"HH0IOHIO`IOxIHHIOxIO`IOHIO0HIH\$XHl$`Ht$hH0A_A^_̃t.t$ttt3HHA0HAxHA`HAHHHHAVH0H@HXHpHx LH HH0INHIN`IN`INHIN0HIH\$HHt$PH|$XH0A^̃tt t3HA`HA0HAHH\$Ht$H|$ AVH03LHHuzWHx+]HbHIHu?HVHD$HAH\$(HH\$HHD$ EA$uHL$HH9N AH\$@H|$XHt$PH0A^H\$Hl$VWATAVAWH03EH|$`MHDgHsMjHaIH@0\DO3I֋HHD$`DHD$(D|$ +H|$`؅)L3E9aTu_EAXEuAQAQPtIA+t>A+t9A+tA+t/A+t A;u+AQLAQLtA+tuE;tAuE;3AE9aTu=AAPAu4t/EAXEuA!tA+tuE;tAuE;…uMME3EEAu tA A;wAu@8utAA A;tutA@H`AIH@X WHtHAHHtLo)ӹ@OHl$pH\$hH0A_A^A\_^H\$Ht$WH HHI)ILHu>Hh)@W1DL_*ӹ׊Ht$8H\$0H _Hu Hu)HHu H)HDHH@؅uH)H辉H\$Hl$Ht$WH0HH *AI脉HuCH *@WiDL*ӹHl$HH\$@Ht$PH0_Hu H(*HHu H(HDDHH@ C؅uH>*HH\$Hl$Ht$WATAUAVAWHPHi^LHAEHH@03DDHT$@H9$uZW@HO*zDAEt[t?t.t@HN*ϻ2B-!ؽ HD$@EHD$0DHT$(IHDt$ DLt$@@tDH)Eċϻ2踇ISI΋K؃du3tL)Ћ;t+t#؅tDH)PIL$hIHHHIHLIHH$DHl$ Dŋmt_ItM/MtIIHtEL)ӋVL\$PI[0Ik8Is@IA_A^A]A\_LS)H ) WH &EvH\$Ht$H|$UATAUAVAWHHp3HE؋H[LHIELH@0+D3Hu_W@L)臆HHMu 2L)й@Q@H3Hu GEu)HEE3HD$0EIH|$(I[؅OAuA(u AHEAHD$0EIH|$(IE3؅DHEHEIHD$0IH|$(؅HEEHD$0EL$IH|$(I؅E3EHME3fGLAQVuL(HLEHHMDeHAzA;uDUHAN]HHLEHHHMxu"H3L& xADޅtL'ӹ@菄H3L\$pI[0Is8I{@IA_A^A]A\]HHXHhVWAVH@H` LH AHH:؅tH]'D@XHXHH@0H XL )HHT$xDHHEDLEHHd$0H GHL$(H GHL$ H*؅t H'sEtDLHYHL$xtL'ӹ@]Hl$hH\$`H@A^_^LWATAUAVAWHpICI[Is HBH3HD$`LLAEA IS3ɅuL&@؂DD;t$PLD$0AI3ɅIuH^HA#HLCHT$0mD3ɄtHH[8K!tHEtcH;>uAHT$@HD$0LHD$ I=m8O!tHW4H8H!uHH@8H!tHG H;u HH@8H!t8J!HDHLD$0t EHT$HH%@AHL$`H3cL\$pI[@IsHIA_A^A]A\_H\$Ht$H|$UATAUAVAWHHHcVMAULH@0LFVIDILEIHHE3HEHEHEPEHEfE5LuЋDEPALeLut1t t{2H"ۃۃ! ۃ HMHEHD$0EHEDHD$(IՋED$ <t"DH!Eǹ@2H]RH]HCHˋCtL\$й@4!tDHW$@UMt IHtHHHntLS$׹@L$I[0Is8I{@IA_A^A]A\]H\$Hl$Ht$WH`HyTA؋HH@0L _TH΋IH$DA4HHH$Hd$@d$HHd$PHD$0HD$@HD$(|$ f\$X[;H$t2Hc DŹ@DK*~NHHϋB؅tL"й@~!؅tDH"@}HtHHHtL"ӹ@f~L\$`I[IkIs I_@SVWATAUAVAWHHD$`H=H3HD$xEDL$HIHD$XT$4HL$PL$Lt$@3E22ۈ\$0@2@|$1DNDF HT$hH3҅uLm!EDD;d$h&LD$8AHL$Xn3҅L|$8I^H{L HWLD$8D3҄tHLH?8W!tL;tMFHT$83҄tLL;t\$0@|$1Lt$@HBHIO3҄t\$0@|$1Lt$@oHD$8H5t25t)5t\$0u D$1\$0EtA\$0@|$1t @t@|$1Lt$@ t$4AD|$4Lt$PEAtEAI3҅ctAAI3҅B@tAAIi3҅ Lt$@ADD;|$hLD$8AHL$X3҅Ld$8I^H{L HWLD$83҄tHLH?8W!tL;tMFHT$8gtLL;tHFIL$73҄teHD$8H5t+5t"5uuA AfD$ ML$DD$HT$4HL$P^t ELt$@tLֹ@zHL$xH3\HĀA_A^A]A\_^[HUATAUAVAWHhHHE/HXHpHxALHE3Lu'LuALuLuMHE@!HEH@HEHHEH@LuMHE@!HEH@HEHHEH@LuHNIH@0~DL=+H+ELELM'DIHDH]'@HNHMHL$PH\$HH =HL$@Hd$8H =HL$0Hd$(H S+HL$ L W+MNjIH@(D=ukHMHtStIEuDE3Mt?HNLl$0Ll$(Ll$ MDHUIHD=uE3E$E3EtLAֹ@xE3HMHt*LMLEHUugDLHtLMLEHUHwtLEMtHUILEHMHtHULEHMMt$HEHD$ AIDu4HMHt+DAAD HEHD$ LIDE3HLHMHOHt H9EtLAֹ@wH}HwHD8n!u%HSHM5HH&SHD8k!tH}HLmHEHHEH@H}HRLmLmHEHxHD8o!u%HSHM\5HHRHD8k!tHEH@LmHEHHEH@HMRAL$I[0Is8I{@IA_A^A]A\]H\$Ht$WH HAHHpH~!u HWH4H?H2R!HtHCH@HCHcHHCH@HKRHcHcH\$0Ht$8H _H\$Hl$Ht$WH AHHHtjHteHJHH@0|u K Eكwu 8Gt tu@HJDËHH@X-WH\$0Hl$8Ht$@H _H\$Hl$VWAWH@d$`AHA@HuYWAHtxLD$`K؅tLOLAuH|$`HO t4D$x*KD$0 d$0l$xHILL$xAgH@P9؅tLAtH~ILL$0HOAhH@P؅t LfHWDH!HOH8IDŋH@tALNLGHAϻZsI|$`t&HWDH ؅u-HLGH AϻstL@AsHMArHl$pH\$hH@A__^H\$UVWAVAWHH`H.3H3HEHPHLHEH3H@0AƃDH!HHH@8EqEEEEEEуDHGHH@8TH]szHEƇ8HD$(DKDDt$ HIHuDu*HHtADHUЉ<A4HESHtHHHATH1GHH@0HMAHL$(DIDt$ HVHMHtHH~ߋHMH3TH$H`A_A^_^]H\$Ht$WH HFHH@8/LFHˋI@0tTt$uY΃tftct ;u5UPtttAt:!t u % t t t3H\$0Ht$8H _HHXHHUVWATAUAVAWH03HHX EHELE333H@0?DtuH=43kH=}43ItVDH$HL$pEHD$(IDl$ H$Du,HtHHHAV3H$H;rHtHHHAH\$xH0A_A^A]A\_^]HHXHHUVWATAUAVAWH03HHX EHDLE333H@0'Dt#tu%H=33H=l3H=33ItVDH$HL$pEHD$(IDl$ mH$Du,HtHHHAV3H$H;rHtHHH]AH\$xH0A_A^A]A\_^]H(Ht=Ht89sAHm0Hx H aCH3AWHAHmWH(H\$Hl$Ht$ WATAUAVAWH 3EMLHu HaHHf9u!HEHD$ EDHWH{؅u(AHIcHrE'AuHEHG H :$@EHuHhtLӹ@hHML$I[8Is@I{HIA_A^A]A\]H\$Ht$WH HHٲH b:AHz@gHtE3DHH6WLrӹ@hH :AHt$8H\$0H _Ht3SH HH HtHHRH#H=H [@SHHD$ HW'H3H$MAMuH@fWDDHL$0:$IHL$0<>襳tDH@efHL$0|؅tDH@:fHHD$0HL$0H$H3HH[@SH HHXHt&HKAE3AQk?HDLӹ@ifH [H\$WH HHxHtBHWE3AH H肔HOfDJDBH^DLuӹ@eH\$0H _HHXHhHp WATAUAVAWH@E3HD!pHH:ED!t$0EHH@0HuHB@_WdEuH؅DpHT$pHX؅H:HH@8DEu;t6HDCLI<1؅tLй@dH؅Hd$8DpH9HH@0HL$8HHL$(DK"HD|$ D؅tLй@]dHL$8HtHAHtnL}\EHH؅t LC:EHH؅t LKEHH؅t LS|$puAH|؅D$0t|EtH8؅t LE3Et%HA<LH؅t9rA.u As uEHH؋D$p!L$0uEt|HpEtkHLpMtDIVDAI9INfDJDBpIDLTֹ@bu99\$puF9\$0u@Ett7AH4؅t&Lй@_bL$ӹ@LbL\$@I[8Ik@IsHIA_A^A]A\_+3MuAAWÃuJEtA HHXHhHp WH@H`IMu AXWA HuYW@H`HD$`E3HD$0Hd$(T$ HQEA'H|$`؅tH@`hHBHϋ$؅tLй@3a;薭؅tDH@T`HHt xDtHtHHHaHl$XH\$PHt$hH@_HHXHhHpHx AVH@AALHHt$xHHpEH`DNjD$pD$ ؅tDH @Dŋ_HHH@Hu#ؿ@tLЋ`lu%HHH@(|H L+_H؅5HSHHHtHH@(%(HHHt%HH@0؅t4LЋ[_H^tLӋ7_ugHHH@Ha"؅to؅؅6AE3ƃtVуt9t-t!+tt&tt;ui|uAht8t,t tt$tt u092뻿봃 tttt3 /,H+IH[؅Ht$@zHHEt1HH@H +Lȋ$LQ`I"HH`+H@LȺHChDI؅uZHИvHtHHH3Ht$@IA;$$L$L LLDϹ@UFH@WT.ILDϋHHL$(@t$ UHt$@HtHHHtL9ӹ@YUH$HPA_A^A]A\_^]HH\$Ht$WH HBHHH;t&H)AHKH@vHH9_uHGHHHGH@HgH;OtHp0HH;_uH\$0Ht$8H _@SVWATAUAVAWHHD$HH=H3H$MEDLH$0H|$@3Ht$0HD$0HD$ MEAI؅uMAHL$0HHD$0HHD$8HwLL$8LFH HHGHH+Hs9HHL$PoHT$PH$HYH$<HHGHVHBH3 \$8H|$@Ht$0DޅtH׋"Lwӹ@GSH$H3Q5HA_A^A]A\_^[H\$Hl$Ht$WATAUAVAWH@H$3IEDHDHtHuHb@RH>LMuH@A^WQjH'du f؅tLй@lR"IHD'IH@LALHH؅t=t L:H9>IH=&IH@{IIHHBcHt$(LLDl$ HGAHC3؅t L3AuAt H@8K9u!9tHe&HH@0uAHF&EHAH@X؅ttLӹ@&QL\$@I[0Ik8Is@IA_A^A]A\_HDH D@HPHHSUVWHH@33Hl$H3H%HH@0?DHK@Ot.tu7HH\$Hn)HH\$HHH\$HHH!t$XHcHD$`HB3HHD$pHtHGHg3@HDDH'OD$@Hd$PHL$PHL$0Hd$($L$ ADH$H$Hl$Pu#H|$ LD$T$@H$HtHEHHtDH@NH(DH@[NHGHH;Hl$HHCHD$@D$HH$]cD$HT$@H$3Eu*}t$D$HT$@H$2PHe#HL$@HtGEu>}t8$$uu"DDHT$@H$&HH9_ H\$HHH׋HGHHHGH@HgH;OtH)HH;_uH\$HHOi)HgH\)3HD$XHHD$XHH\$HH;D$`}RYDH"DHBDH DH@L"H LH$ƀ8HtNH׋HGHHHGH@HgH;OtH(HH;_uHO(HgH(tLֹ@LHĈ_^][@USVWHl$HHEHL H3HEDL$@EDELHUHM3HEH@H3H!uH;CEHC(HEH*!LMLEAIH3HUHJLUI9J :E3HMHMHM׉EHEHD$0HEHD$(D$@D$ DIDEHUI,HEHD$ HEHELDD$@UHMqu]HEM<HMHtHWH3HMDD$@HUHM&u4DD$@HUHMHMHMHtHHHMHtHAH@rLc׹@JkADD$@HUIE:1HiHMHEu2Hk-HEHtHUHRH3DHHt2-HHEHHEfHfHfHF HHH~0H}HG@1HGH@HGHHGH@HgH~HH}HG@1HGH@HGHHGH@HgH~`H}HG@1HGH@HGHHGH@HgF(03H^HDD$@HUHH@EE EEE!EHMHM MHHH@WHt%HD$ DL$@DEHUHMEEHMHHMHHrHHH3HZE33HMH@߻He{1tHd$ E3E333W04HCx1uHHx1tHC H;Xu HH@x1tHHEH;Xt7DUL]L+L5LT׹@GHMHtHAH@HtHHHtL"׹@jGHMH3x)H_^[]HL$H8HD$ X"HD$@HtHHHHtHH8HHHWH0H@HXHpIIHڹ"HHD$@HtHHtH8HQHtHHHH\$HHt$PH0_E3HbmLALALALA LA(H0L8L@DHHXH̤L`LhDpHHLDDLLH\$WH H$tH!HH\$0H _HL$SH0HD$ HH+HHHtHHH3HHH0[~̋Dʹ';3Ʌy@tà atUA8A)AAt'D+tD;AtGD+t3D+t$AtA  AA*tAtmAtbAtUD+RAu%H$HHH6HT%H$HHHnH %H$HHtuMH `H $H$HHtDHɟ/Hl $H$HHtHȟH3H H HuyZHD$xEHMċD$pIH D$(l$ xu+L IMHQII@t*}tH HtHHvH#H\$PH|$hHl$XHt$`H0A_A^A\HHXHhHpHx AVH0H3HEIHHtHSHHHuHk@^W?HHH@(ѳDD$`LAHD$hD$(HHHHD$ DDHTHHuX)H HHMbH˅J|Hl$HH\$@Ht$PH|$XH0A^H\$WH HH'u HHlH\$0H _H\$Hl$Ht$ WAVAWH0DHDH@3p>HHH!t$PH@(LH98tH8HHXH8HuH!@H !HHH!HHH!pH@HH@HtHHH8H@HHi3A9vIVLL$PHDHH@ȱL|$PH HF!HH`H@HH@HtHAH8HH@LxA;nm3A9n IVLL$PHDHH@)L|$PHW H Ht!H`HhHHhHt2HA3HL$PHtxhIFHLM@D {<[H`pHhLxA;n s;DIFHQHHHtHHcH\$XHt$hHl$`H0A_A^_@SH HHt,~#yDH @;3H [H\$WH HHHztHHH\$0H _A!t_t9Bt!+t1DA (A AtDAtDBAE3A ~+~DAAA {As"tLt?t2t%tt uPDAJABA:A2A*A"tt uDB AA A̋ NtDt8t+ttHiHAHQHHHÃt8t+ttHH$HHHHÃKtA t4t'tt uDHHHH\HHÃt*ttt3HHHeHH\$WH HOHHZtHHH\$0H _A"9(te+tM+t>+t/+t +t;DAAAAA A tBt2t"tDBA vAkA`AUtBt2t"t8DB/A$AAAE3A ~0~AAA AtCt6t)ttDBAwAoAgA_AW.tLt?t2t%tt u4DA .A &AAAAAA̋utkt_tRtEt8t+ttVHHBHbH2HHHHrHà t_tRtEt8t+ttHH6HVHHH~HHFHvÃrtht[tNtAt4t'tt ukHHGHHHHHH/H7ÃtQtDt7t*ttt3HH!H)HIHHHaH\$WH HHHtHUHH\$0H _A! EHA;t>t. V~AA;EEA<A 1A &t2t"tDB A AA t"A+tDBAAt!A+tEAAE3|At"t? t2t%tt uVDAPAHA@A8A0t%tt uDBAAAA̋ [tQtEt8t+ttH,HHHlHHLHÃt8t+ttHHHHHHÃKtA t4t'tt uIH/HHHgHHÃt7t*ttt3H+HHHHH\$WH H/HHtH HH\$0H _̋WtMtAt4t'tt uQHHHHH?HHÃt7t*ttt3HKHHHHH\$WH HHHtH HH\$0H _̃[tStKt@t5t*ttt uTAøøøøøø3øÃtFt;t0t%tttø ø ø øøø ø ̋qtgt[tNtAt4t'tt ukHHHHmHmHH-HHà tQtDt7t*ttt3HHwHGHHHHH\$WH HHHtH5 HH\$0H _̋Jt@t4t'tt uDHHHH<H HÃt*ttt3H]H-HHH\$WH HHHtHU HH\$0H _̋t*ttt3H HHH}E3HTLQLQLQLQ LQ(H0L8L@DHHXH L`LhDpHLDDDu H^ HIEHHH\$WH H/HHetHHH\$0H _HHQeH\$Hl$Ht$ WATAUAVAWH 3HH98t,H8HHHXH8H8HuԽH@H9L5Dm/IAHD$PHL%Ht*Hx@HHCHHC(H{ L#HHAIAwHHHxH@HH@HtHHH8HIH@HYI(HD$PHHtHxhHHCH{ H{(L#HHII HH]HxH@HH@HtHHH8HIH@HYI HD$PHHt&HxhHHCHHH{ H{(HHIIL HHHxH@HH@HtHHH8HIH@HYI HD$PHHtHxhHHCH{ H{(L#HHt^II HHt:HxH@HH@HtHHH8HH@HY0HHHϜuLB@,)H\$XHl$`Ht$hH A_A^A]A\_H\$Ht$WH HHH؅uHHi؅t1uL@(Ht$8H\$0H _@UAVAWHHl$ HHHH&H3HEhe$HLt$ AA0HUIHL}HM8}E H3eH%0HxH;t3H=ut  _H=?L%>I;s#uH9t HHI;rcHH 3 ou HH9H9t(H  tHMƺI8zH\$@Hl$HH|$PH A_A^A\H\$Ht$WH IHu LNjHH\$0Ht$8H _HHX L@PHHVWAVHPLމ\$ ;wu9u 3ۉ\$ B;L MtB;DƉL$I=؉D$ 3ۉ\$ s$xL$pyL$I؉D$ 3ۉ\$ s$xL$p?L$In؉D$ 3ۉ\$ s$xL$p;E33ITn$xL$p\$ E33I$xL$p\$ HHt(E33I1$xL$p\$ turL$I؉D$ 3ۉ\$ s$xL$pH%Ht4=t+L$I؉D$ 3ۉ\$ s$x;w H$HPA^_^ffH; uHfuHHLH D@HPSVWAVH8MIcH`HHHHx\$pxH+H|$`HIHD$ H8A^_^[H\$DD$HL$VWAVH@IALH\$pxI+H|$`HHH\$hH@A^_^H8HD$ HD$PH8_H\$WH HیtH.HH\$0H _H8LHt53HBII;s'Hd$ E3E333 N3H8MIH8m@SH H3H.ȉHȺ H [H%HL$HH -HHD$HE3HT$PHL$HHD$@H|$@tBHD$8HD$XHD$0HD$`HD$(HHD$ LL$@LD$HHT$P3#HJHHH9HH.HHH$H HkH HHkH HlHHkH HAHHkH =HLhHkH HLhH @OHĈHxH HHD$HE3HT$PHL$HpHD$@H|$@tBHD$8HD$XHD$0HD$`HD$(HgHD$ LL$@LD$HHT$P3#HHH0HHHHHn hrHkH jHH ?NHx@SH HHHD$8HuH]~HtHD$8HxHD$@LD$@HT$8HkHHT$8HBHT$@HF:HH [H(cHH(%HHXHp HPHHWAVAWH0MEHH3ۉX؉X܉\$ A;}HIHH|$PD$$H\$`Ht$hH0A_A^_%V%:%&@SH@H|H3H$0HL$`H$XHT$@HE3Ht9Hd$8HL$HHT$@LHL$0LHL$PHL$(HL$`HL$ 3 H$HH$XH$HH$H ȡ҃H$0H32H@[%%%t%`%LH(MA8HIH(@SEHALALtA@McPLHcL#IcJHCHHKAt AHLL3I[eHHXHhHpHx AVH IY8HMHIHILCdD[ADUAA#AAfDDEtLMHHDH\$0AHl$8Ht$@H|$HH A^%%LcA/HHVHHH@HPuH>uH@HxuH( VH`VHHVH`HpUHH ]@UH HHHMhH ]H@H@HH@H@UH HHKHMhH ]@UH HH,HMhH ]H@GH@HtH@HaH@H bTH@H`OTHH/HH#H@H@VH@H0?WH@HH/WH@H`WH@HxWHT$UH0HHZH0]HT$UH@HE@L5@*H`H@]H@!VH@H0VH@HH}VHPUHPH0[VHPHHKVHPH`;VHPHx+VHPHVH@UH@H0UH@HHUH@H`UHT$UH0HL@H:oH0]HT$UH0HE4L}@HJtH0]HT$UH0HE4LD@HtH0]HyHhyH@zTHTH@H0THTH@HHTH@J_H0HP@HT$UH0HE8Lӟ@H?H0]@UH HHsHMpH ]@UH HHNHH ]@UH HH,HH ]H^SHH0SHHHSHT$UH HHU@33HT$UH HHU@33H@t@UH HH3Ɂ8H ]@UH HHHHU(E(=csmuHM(E0E0E0H ]@UH HHHHU8E8=csmuHM8`E@E@E@H ]@UH HHHHUHEH=csmuHMH EPEPEPH ]@UH HH HHUXEX=csmuHMXE`E`E`H ]@UH HH(HHUhEh=csmuHMhdEpEpEpH ]@UH HH0HHUxEx=csmuHMx DžH ]@UH HH8HH=csmuH DžH ]@UH HH@HH=csmuHD DžH ]@UH Hꃽxw gH ]@UH H} uLMxDEpHUhHM`>H ]@UH HHM8HM(HE(HHM0HE08csmt E E [H ]HT$UH HHePHHH ]@UH HeH ]@UH H}$uLMpDE HUXHMP}H ]@UH HH3Ɂ8H ]HH bH[oH(H WH ؿHt[H%ſ%ƿ%ÿH(H\$Ht$WH =HH5;u˿3ۅ~73H;HH YH;|H Ht[H%l%mH .%cV%H CHtZH%0%1%.H\$0Ht$8H _ùzH\$WH =tWHH.H;Ht"HO Ht HH@W\Hg H۾HH;rH Ӿ V%H\$0H _H!H H H!H H r0uuvHv`vxvvvvvvvP"P""*7P"P"FGFUUTT >>@??@MSQU0VVUM0R PPPQR OpPN QNpOQRNONpMNO TOpNOTPpR`O`MMM R`RRRPMSPR`NMOO`PQ SPS@SPOR@RTQRROU0WWV0SPPPNNOQpTNS@O@TM0OPS@N0TSS0NR`TSPTRNPMSpS`S@PP@Q0QRQPSPSM NNP`QNQQM0PP G`G@GU0XXW ` ` `0PpPP0pP0pPPp0FGFU0bZPYpJPHJU0bZPYLJPHGLpQQQU0VVUM0R PPPQR OpPN QNpOQRNONpMNO TOpNOTPpR`O`MMM R`RRRPMSPR`NMOO`PQ SPS@SPOR@RTQOOPU0WWV0SPPPNNOQpTNS@O@TM0OPS@N0TSS0NR`TSPTRNPMSpS`S@PP@Q0QRQPSPSM NNP`QNQQM0PP`IIIU0XXW ` ` `0PpPP0pP0pPPp0LHPHGKpHPHHUUTT >>@??PKGPHGJ   bcEFFbcss7pyutop p@pPppqqsp`pp`@0p` p`"#p`0& 'p`)p*p`,-p` 01263       1       @.       *       '                     P$2606p7726`;QUp0pp0`@` p0P-0.P/O0U ppPPp  @ @0@`p +зIU  p @##"##$@$$$%@%%%&@&&''@(()@))*p**PHUp0pQUppPPP@@@p0P0`pPp@0`@00P P 0    @ O0Up0`p `ppP`P```@P@0pP@`0`@@0IPUp ` ` `0pPp0pP0p`0 pP @`@`PP@p@Upp  p@@0 p`0@`  PXXY@YYYaжUpX@XRS@SSS`TU@VWWZ`ZZ [[0\P]]^_p__@``\\^p^UV@U p ``00PUp `` @ @Up `@0 P  `PPGpHI KL`MpNOеUp6P655667P7>7 889;;<P=p>?p??@@@ABC@DD@EEFGPG09p:p;0<<=  @Up`0@ P` @00Ppq`r0t0Upe0fpeepffjpjj0kkl@mmno`ofghpio0pPun`n0h QpUppp@`@ХOUp@PPP`p`IUpМP@ Pp0Up1мP0Up@.P00U  p *л0Up'P0Upкг0UpP0U  p P$й0U  p !PPHUp       !PP0p0` Po0@T}@0pS }z  PQ|oo`oPPx}@x`0|;=BHIH`HpDC/ 04`8P97 8P540'(`+P  --,P,0#p# $% s7`$@$` " s7P! 00 s7`0P s7@ `  s70 PKoooooJMKKMK7KMPKoooooJMKKM777MPKKKoLoJM L0L@L`L7pLLPKoooooJMLLM777MPKoooooJMLLM777MPKoooooJM LLMK7KMP  s7`M``MpM0JJPKoooooJM  M777MPKoooooJMMMM777M*0`PPR[ PPRZNPYZMPR  P-./P-./ P-./@ P-./ 0P-./pP-./жpP-./PP-./ P-./  *P-./0@P`pȀ؀8`Ёt(8HXhxȍ؍(8HXhxp p@A`A0AA>@x@P`N0PNO0NpP`GHHHHH@GpGGp0]8]]z5lllll mmtt u$u8u.m>mNm`mrmmpppxp`pJp4pppooooooloTo8ooonnnnnznfnRn@n.nnnmmmmmlpq*qNqlqqqqqq~r^rpp>?p??@@@ABC@DD@EEFGPGGpHI KL`MpNORS@SSS`TUU@VVWWX@XXXY@YYYZ`ZZ [[0\\\P]]^p^^_p__@``apeee0fpfffg0hhpijpjj0kkl@mmn`nno`oo0ppq`r0tPu@МP@ `Pp`Х0г0Pp0е0Pж0PзPйPкPлPмP @@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`ppppppppppppppppp p   p   p   p   p  pppppp`p@0 !"#P$0& '')p**,-@. 01123606p77`; >>@??PPQS@TW ^^^^`_`x| }} ` P0p0` P0pPP p @*P=RzPЊ 000л```@@@ `PP 0g0wPw@xyypzzz0|}@ `@pPа@p @``иPp  0@00``P   `  0@P00`0` P!"0#p# $@$`$%0'(`+P,,--/ 044P57 8`8P9;=BCpDH`HHIJJPKKKKKKL L0L@L`LpLLLLLLM`MpMMMMMMMN P`PPRPYZZ[{~~0P pж0p  @  `@p0P Pp0Pp0Pp0Pp0PpPp0Pp0P@` @"F " G string too longinvalid string position"\HH Invalid parameter passed to C runtime function. FFF+ _,d* _,dXvH,m` 7 ʩWLDAP32.dllnetutils.dllDSROLE.dlldfscli.dlllogoncli.dllSecur32.dllMPR.dllSHLWAPI.dllbad allocationCLSIDAppIDSMDBValForceRemoveNoRemoveDeleteComponent CategoriesFileTypeInterfaceHardwareMimeSAMSECURITYSYSTEMSoftwareTypeLib#FSqlDatabase::SqlDatabase : Memory Allocation failed. SqlConnection::Reconnect() : Connect failed with 0x%08X. SqlConnection::Reconnect() : Connect succeeded. SqlConnection::Reconnect() : SQLAllocHandle failed with 0x%08X. SqlConnection::Reconnect() : BindParams failed with 0x%08X. SqlConnection::Reconnect() : BindResult failed with 0x%08X. SQLConnection::ReConnect(): Database::SwitchDatabase returned 0x%08X. SQLConnection::ReConnect(): m_pszDBName is NULL ! SqlConnection::NeedsReConnect(): returned 0x%08X. Microsoft SQL Server%u.%u.%u{?=CALL {CALL (?,)}odbc code %i, State %S, Message: %S DbServer::CreateDatabase(): ::new failed with 0x%08X.DbServer::CreateDatabase(): ExecStatement(%S) failed with 0x%08X. FILEcreate database [%s] alter database [%s] set recovery simple ???????????????????????????????????????????????? ???????  !"#??????  !"#?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????FF}PjItH D̩킛jO0EUwsB s % Oqln}^ERwFFF\Required CategoriesCLSID\\Implemented Categories.tlbFFFAPPIDModuleModule_RawREGISTRYHKCRHKCUHKLMHKUHKPDHKDDHKCCHKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSHKEY_PERFORMANCE_DATAHKEY_DYN_DATAHKEY_CURRENT_CONFIGAPI-MS-Win-Core-LocalRegistry-L1-1-0.dllRegDeleteKeyExWadvapi32.dllRegDeleteKeyW]:HpNܡMZ>o-\QKC<7̮wYW Ki0@:>2H2H%e&?NF[VH ciB*yMPsCpO@qOS}PjItH DsM; $1}dUZ O+_իvٙ%DXf%UPEz@^DAH[M̌^q}J. @Y'OKKm]O(ADSo:=_h]M'nS<}^ERw + H! HmF٤M_/}`" bA4]CjL too longH ciB*yMPsCpO@qOSinvalid map/set iterator.lJ6mH2H%e&ٙ%DXf_h]M'nS<{'Mk~hjI|Cmj`^q}J. DXN6y?NF[VOV^aMDě^Nt^DAH[M̌̇$E.}VE@Y' bA4]C1}dUZ O+_իv HmF٤OKKm]OŕJ BljL[BSTR=%s],[I4=%d],[I2=%d],[other value],[other value]%s\%s%s%s calls myAzNewObject enumObject=%d %s leaves myAzNewObject: return HRESULT value=0x%lx %s calls myAzCreateObject bstrObjectName=%s %s leaves myAzCreateObject: return HRESULT value=0x%lx %s calls myAzDeleteObject bstrObjectName=%s %s leaves myAzDeleteObject: return HRESULT value=0x%lx %s calls myAzOpenObject bstrObjectName=%s %s leave myAzOpenObject: return HRESULT value=0x%lx %s calls myAzCloseObject bstrObjectName=%s %s leaves myAzCloseObject: return HRESULT value=0x%lx %s calls myAzNextObject Enumeration completed. %s leaves myAzNextObject: no more results. %s leaves myAzNextObject: return HRESULT value=0x%lx %s calls myAzGetProperty: lPropId=%d Can't DS bind. Will just return non-UPN names %s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=%s %s leaves myAzGetProperty: return HRESULT value=0x%lx pvarProp=NULL %s calls %s: lPropId=%d pvarProp=%s %s calls %s: lPropId=%d pvarProp=NULL myAzSetProperty%s leaves myAzSetProperty: return HRESULT value=0x%lx myAzAddOrDeletePropertyItem%s leaves myAzAddOrDeletePropertyItem: return HRESULT value=0x%lx %s calls myGetBstrProperty: lPropId=%d %s leaves myGetBstrProperty: return HRESULT value=0x%lx pbstrProp=NULL %s leaves myGetBstrProperty: return HRESULT value=0x%lx *pbstrProp=%s %s calls mySetBstrProperty: lPropId=%d bstrProp=%s %s leaves mySetBstrProperty: return HRESULT value=0x%lx %s calls myGetLongProperty: lPropId=%d %s leaves myGetLongProperty: return HRESULT value=0x%lx plProp=NULL %s leaves myGetLongProperty: return HRESULT value=0x%lx *plProp=%d %s calls mySetLongProperty: lPropId=%d lProp=%d %s leaves mySetLongProperty: return HRESULT value=0x%lx %s calls myGetBoolProperty: lPropId=%d %s leaves myGetBoolProperty: return HRESULT value=0x%lx plProp=NULL %s leaves myGetBoolProperty: return HRESULT value=0x%lx *plProp=%d %s calls mySetBoolProperty: lPropId=%d fProp=%d %s leaves mySetBoolProperty: return HRESULT value=0x%lx CAzPrincipalLocator constructor called.Software\Microsoft\AzMan\ObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, failed to query value for ObjectPicker CLSIDCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzObjectPickerCAzPrincipalLocator::CAzPrincipalLocator, registered object picker doesn't implement IAzNameResolverCAzPrincipalLocator::CAzPrincipalLocator RegOpenKeyEx failed.CAzPrincipalLocator destructor called.Enter CAzPrincipalLocator::get_NameResolver Leave CAzPrincipalLocator::get_NameResolver: return HRESULT value=0x%lx Enter CAzPrincipalLocator::get_ObjectPicker Leave CAzPrincipalLocator::get_ObjectPicker: return HRESULT value=0x%lx CAzAuthorizationStore constructor called. CAzAuthorizationStore destructor called. CAzAuthorizationStore::get_DescriptionCAzAuthorizationStore::put_DescriptionCAzAuthorizationStore::get_ApplicationDataCAzAuthorizationStore::put_ApplicationDataCAzAuthorizationStore::get_DomainTimeoutCAzAuthorizationStore::put_DomainTimeoutCAzAuthorizationStore::get_ScriptEngineTimeoutCAzAuthorizationStore::put_ScriptEngineTimeoutCAzAuthorizationStore::get_MaxScriptEnginesCAzAuthorizationStore::put_MaxScriptEnginesCAzAuthorizationStore::get_GenerateAuditsCAzAuthorizationStore::put_GenerateAuditsCAzAuthorizationStore::get_WritableCAzAuthorizationStore::GetPropertyCAzAuthorizationStore::SetPropertyCAzAuthorizationStore::AddPropertyItemCAzAuthorizationStore::DeletePropertyItemCAzAuthorizationStore::get_PolicyAdministratorsCAzAuthorizationStore::get_PolicyAdministratorsNameCAzAuthorizationStore::get_PolicyReadersCAzAuthorizationStore::get_PolicyReadersNameCAzAuthorizationStore::AddPolicyAdministratorCAzAuthorizationStore::AddPolicyAdministratorNameCAzAuthorizationStore::DeletePolicyAdministratorCAzAuthorizationStore::DeletePolicyAdministratorNameCAzAuthorizationStore::AddPolicyReaderCAzAuthorizationStore::AddPolicyReaderNameCAzAuthorizationStore::DeletePolicyReaderCAzAuthorizationStore::DeletePolicyReaderNameCAzAuthorizationStore::get_TargetMachineEnter CAzAuthorizationStore::Initialize: lFlag=0x%lx bstrPolicyURL=[%s] Leave CAzAuthorizationStore::Initialize: return HRESULT value=0x%lx Enter CAzAuthorizationStore::IsUpdateNeeded Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx pbIsUpdateNeeded == NULL Leave CAzAuthorizationStore::IsUpdateNeeded: return HRESULT value=0x%lx *pbIsUpdateNeeded=%d Enter CAzAuthorizationStore::UpdateCache Leave CAzAuthorizationStore::UpdateCache: return HRESULT value=0x%lx Enter CAzAuthorizationStore::Delete Leave CAzAuthorizationStore::Delete: return HRESULT value=0x%lx CAzAuthorizationStore::get_ApplicationsCAzAuthorizationStore::OpenApplicationCAzAuthorizationStore::CloseApplicationCAzAuthorizationStore::CreateApplicationCAzAuthorizationStore::DeleteApplicationCAzAuthorizationStore::get_ApplicationGroupsCAzAuthorizationStore::CreateApplicationGroupCAzAuthorizationStore::OpenApplicationGroupCAzAuthorizationStore::DeleteApplicationGroupEnter CAzAuthorizationStore::Submit lFlags=%d Leave CAzAuthorizationStore::Submit: return HRESULT value=0x%lx CAzAuthorizationStore::get_DelegatedPolicyUsersCAzAuthorizationStore::get_DelegatedPolicyUsersNameCAzAuthorizationStore::AddDelegatedPolicyUserCAzAuthorizationStore::AddDelegatedPolicyUserNameCAzAuthorizationStore::DeleteDelegatedPolicyUserCAzAuthorizationStore::DeleteDelegatedPolicyUserNameCAzAuthorizationStore::put_ApplyStoreSaclCAzAuthorizationStore::get_ApplyStoreSaclCAzAuthorizationStore::OpenApplication2CAzAuthorizationStore::CreateApplication2CAzApplication constructor calledCAzApplication destructor calledEnter CAzApplication::_Init hHandle=0x%lx Leave CAzApplication::_Init: return HRESULT value=0x%lx CAzApplication::get_DescriptionCAzApplication::put_DescriptionCAzApplication::get_NameCAzApplication::put_NameCAzApplication::get_ApplicationDataCAzApplication::put_ApplicationDataCAzApplication::get_AuthzInterfaceClsidCAzApplication::put_AuthzInterfaceClsidCAzApplication::get_VersionCAzApplication::put_VersionCAzApplication::get_GenerateAuditsCAzApplication::put_GenerateAuditsCAzApplication::get_BizruleEnabledCAzApplication::get_ApplyStoreSaclCAzApplication::put_ApplyStoreSaclCAzApplication::get_WritableCAzApplication::GetPropertyCAzApplication::SetPropertyCAzApplication::get_PolicyAdministratorsCAzApplication::get_PolicyAdministratorsNameCAzApplication::get_PolicyReadersCAzApplication::get_PolicyReadersNameCAzApplication::AddPolicyAdministratorCAzApplication::AddPolicyAdministratorNameCAzApplication::DeletePolicyAdministratorCAzApplication::DeletePolicyAdministratorNameCAzApplication::AddPolicyReaderCAzApplication::AddPolicyReaderNameCAzApplication::DeletePolicyReaderCAzApplication::DeletePolicyReaderNameCAzApplication::get_ScopesCAzApplication::OpenScopeCAzApplication::CreateScopeCAzApplication::DeleteScopeCAzApplication::get_OperationsCAzApplication::OpenOperationCAzApplication::CreateOperationCAzApplication::DeleteOperationCAzApplication::get_TasksCAzApplication::OpenTaskCAzApplication::CreateTaskCAzApplication::DeleteTaskCAzApplication::get_ApplicationGroupsCAzApplication::OpenApplicationGroupCAzApplication::CreateApplicationGroupCAzApplication::DeleteApplicationGroupCAzApplication::get_RolesCAzApplication::OpenRoleCAzApplication::CreateRoleCAzApplication::DeleteRoleEnter CAzApplication::InitializeClientContextFromToken ullTokenHandle=0x%8lx%8lx Enter CAzApplication::InitializeClientContextFromToken ullTokenHandle=%d CAzApplication::InitializeClientContextFromTokenLeave CAzApplication::InitializeClientContextFromToken: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromName ClientName=%s DomainName=%s CAzApplication::InitializeClientContextFromNameLeave CAzApplication::InitializeClientContextFromName: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromStringSid SidString=%s CAzApplication::InitializeClientContextFromStringSidLeave CAzApplication::InitializeClientContextFromStringSid: return HRESULT value=0x%lx CAzApplication::AddPropertyItemCAzApplication::DeletePropertyItemEnter CAzApplication::Submit lFlags=%d Leave CAzApplication::Submit: return HRESULT value=0x%lx get_DelegatedPolicyUsersget_DelegatedPolicyUsersNameCAzApplication::AddDelegatedPolicyUserCAzApplication::AddDelegatedPolicyUserNameCAzApplication::DeleteDelegatedPolicyUserEnter CAzApplication::ScopeExists bstrScopeName=%s Bad Param: %d , %d Leave CAzApplication::ScopeExists: return HRESULT value=0x%lx Enter CAzApplication::OpenScope2 bstrScopeName=%s Leave CAzApplication::OpenScope2: return HRESULT value=0x%lx Enter CAzApplication::CreateScope2 bstrScopeName=%s Leave CAzApplication::CreateScope2: return HRESULT value=0x%lx Enter CAzApplication::DeleteScope2 bstrScopeName=%s Leave CAzApplication::DeleteScope2: return HRESULT value=0x%lx Enter CAzApplication::get_RoleDefinitions CAzApplication::get_RoleDefinitionsLeave CAzApplication::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzApplication::CreateRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::CreateRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::OpenRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::OpenRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::DeleteRoleDefinition bstrRoleDefinitionName=%s Leave CAzApplication::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzApplication::get_RoleAssignments CAzApplication::get_RoleAssignmentsLeave CAzApplication::get_RoleAssignments: return HRESULT value=0x%lx Enter CAzApplication::CreateRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::CreateRoleAssignment: return HRESULT value=0x%lx Enter CAzApplication::OpenRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::OpenRoleAssignment: return HRESULT value=0x%lx Enter CAzApplication::DeleteRoleAssignment bstrRoleAssignmentName=%s Leave CAzApplication::DeleteRoleAssignment: return HRESULT value=0x%lx CAzApplication::DeleteDelegatedPolicyUserNameEnter CAzApplication::InitializeClientContext2 IdentifyingString=%s CAzApplication::InitializeClientContext2Leave CAzApplication::InitializeClientContext2: return HRESULT value=0x%lx Enter CAzApplication::InitializeClientContextFromToken2 ulTokenHandleLowPart=%d ulTokenHandleHighPart=%d Leave CAzApplication::InitializeClientContextFromToken2: return HRESULT value=0x%lx Enter CAzApplications::_Init CAzApplications::_InitLeave CAzApplications::_Init: return HRESULT value=0x%lx CAzOperation constructor called. CAzOperation destructor called. Enter: CAzOperation::_Init hOwnerApp=%d hHandle=%d. Leave CAzOperation::_Init: return HRESULT value=0x%lx CAzOperation::get_DescriptionCAzOperation::put_DescriptionCAzOperation::get_NameCAzOperation::put_NameCAzOperation::get_ApplicationDataCAzOperation::put_ApplicationDataCAzOperation::get_WritableCAzOperation::get_OperationIDCAzOperation::put_OperationIDCAzOperation::GetPropertyCAzOperation::SetPropertyEnter CAzOperation::Submit lFlags=%d Leave CAzOperation::Submit: return HRESULT value=0x%lx Enter CAzOperation::RoleAssignments bstrScopeName=%s bRecursive=%d Leave CAzOperation::RoleAssignments: return HRESULT value=0x%lx Enter CAzOperations::_Init hOwnerApp=%d hParent=%d CAzOperations::_InitLeave CAzOperations::_Init: return HRESULT value=0x%lx Enter CAzOperations::_Init hOwnerApp=%d Enter CAzOperations::_AddOperation pOperation=%d CAzOperations::_AddOperationLeave CAzOperations::_AddOperation: return HRESULT value=0x%lx Enter CAzOperations::_AddOperationFromTaskObj hParent=%d Leave CAzOperations::_AddOperationFromTaskObj: return HRESULT value=0x%lx CAzTask constructor called. CAzTask destructor called. Enter CAzTask::_Init hOwnerApp=%d hHandle=%d Leave CAzTask::_Init: return HRESULT value=0x%lx CAzTask::get_DescriptionCAzTask::put_DescriptionCAzTask::get_NameCAzTask::put_NameCAzTask::get_ApplicationDataCAzTask::put_ApplicationDataCAzTask::get_BizRuleCAzTask::put_BizRuleCAzTask::get_BizRuleLanguageCAzTask::put_BizRuleLanguageCAzTask::get_BizRuleImportedPathCAzTask::put_BizRuleImportedPathCAzTask::get_IsRoleDefinitionCAzTask::put_IsRoleDefinitionCAzTask::get_OperationsCAzTask::get_TasksCAzTask::AddOperationCAzTask::DeleteOperationCAzTask::AddTaskCAzTask::DeleteTaskget_WritableCAzTask::GetPropertyCAzTask::SetPropertyCAzTask::AddPropertyItemCAzTask::DeletePropertyItemEnter CAzTask::Submit lFlags=%d Leave CAzTask::Submit: return HRESULT value=0x%lx Enter CAzTask::RoleAssignments bstrScopeName=%s Leave CAzTask::RoleAssignments: return HRESULT value=0x%lx Enter CAzTask::AddRoleDefinition bstrRoleDefinition=%s CAzTask::AddRoleDefinitionLeave CAzTask::AddRoleDefinition: return HRESULT value=0x%lx Enter CAzTask::DeleteRoleDefinition bstrRoleDefinition=%s CAzTask::DeleteRoleDefinitionLeave CAzTask::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzTask::get_RoleDefinitions CAzTask::get_RoleDefinitionsLeave CAzTask::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzTasks::_Init CAzTasks::_InitLeave CAzTasks::_Init: return HRESULT value=0x%lx Enter CAzTasks::_AddTask CAzTasks::_AddTaskLeave CAzTasks::_AddTask: return HRESULT value=0x%lx Enter CAzTasks::_AddTaskFrom Leave CAzTasks::_AddTaskFrom: return HRESULT value=0x%lx Enter CAzScope constructor called. Enter CAzScope destructor called. Enter CAzScope::_Init Leave CAzScope::_Init: return HRESULT value=0x%lx CAzScope::get_DescriptionCAzScope::put_DescriptionCAzScope::get_NameCAzScope::put_NameCAzScope::get_ApplicationDataCAzScope::put_ApplicationDataCAzScope::get_WritableCAzScope::GetPropertyCAzScope::AddPropertyItemCAzScope::DeletePropertyItemCAzScope::get_PolicyAdministratorsCAzScope::get_PolicyAdministratorsNameCAzScope::get_PolicyReadersCAzScope::get_PolicyReadersNameCAzScope::AddPolicyAdministratorCAzScope::AddPolicyAdministratorNameCAzScope::DeletePolicyAdministratorCAzScope::DeletePolicyAdministratorNameCAzScope::AddPolicyReaderCAzScope::AddPolicyReaderNameCAzScope::DeletePolicyReaderCAzScope::DeletePolicyReaderNameCAzScope::SetPropertyCAzScope::get_ApplicationGroupsCAzScope::OpenApplicationGroupCAzScope::CreateApplicationGroupCAzScope::DeleteApplicationGroupEnter CAzScope::get_Roles CAzScope::get_RolesLeave get_Roles: return HRESULT value=0x%lx Enter CAzScope::OpenRole: bstrRoleName=%s CAzScope::OpenRoleLeave CAzScope::OpenRole: return HRESULT value=0x%lx Enter CAzScope::CreateRole: bstrRoleName=%s CAzScope::CreateRoleLeave CAzScope::CreateRole: return HRESULT value=0x%lx CAzScope::DeleteRoleCAzScope::get_TasksCAzScope::OpenTaskCAzScope::CreateTaskCAzScope::DeleteTaskEnter CAzScope::Submit: lFlags=%d Leave CAzScope::Submit: return HRESULT value=0x%lx CAzScope::get_CanBeDelegatedCAzScope::get_BizrulesWritableEnter CAzScope::get_RoleDefinitions CAzScope::get_RoleDefinitionsLeave CAzScope::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzScope::CreateRoleDefinition bstrRoleDefinitionName=%s CAzScope::CreateRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::CreateRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::OpenRoleDefinition bstrRoleDefinitionName=%s CAzScope::OpenRoleDefinition: NULL IAzRoleDefinition parameter.Leave CAzScope::OpenRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::DeleteRoleDefinition bstrRoleDefinitionName=%s Leave CAzScope::DeleteRoleDefinition: return HRESULT value=0x%lx Enter CAzScope::get_RoleAssignments CAzScope::get_RoleAssignmentsLeave CAzScope::get_RoleAssignments: return HRESULT value=0x%lx Enter CAzScope::CreateRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::CreateRoleAssignment: return HRESULT value=0x%lx Enter CAzScope::OpenRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::OpenRoleAssignment: return HRESULT value=0x%lx Enter CAzScope::DeleteRoleAssignment bstrRoleAssignmentName=%s Leave CAzScope::DeleteRoleAssignment: return HRESULT value=0x%lx Enter CAzScopes::_Init CAzScopes::_InitLeave CAzScopes::_Init: return HRESULT value=0x%lx CAzApplicationGroup constructor called. CAzApplicationGroup destructor called. Enter CAzApplicationGroup::_Init Leave CAzApplicationGroup::_Init: return HRESULT value=0x%lx CAzApplicationGroup::get_TypeCAzApplicationGroup::put_TypeCAzApplicationGroup::get_LdapQueryCAzApplicationGroup::put_LdapQueryCAzApplicationGroup::get_AppMembersCAzApplicationGroup::get_AppNonMembersCAzApplicationGroup::get_MembersCAzApplicationGroup::get_MembersNameCAzApplicationGroup::get_NonMembersCAzApplicationGroup::get_NonMembersNameCAzApplicationGroup::get_DescriptionCAzApplicationGroup::put_DescriptionCAzApplicationGroup::get_NameCAzApplicationGroup::put_NameCAzApplicationGroup::get_BizRuleCAzApplicationGroup::put_BizRuleCAzApplicationGroup::get_BizRuleLanguageCAzApplicationGroup::put_BizRuleLanguageCAzApplicationGroup::get_BizRuleImportedPathCAzApplicationGroup::put_BizRuleImportedPathCAzApplicationGroup::AddAppMemberCAzApplicationGroup::DeleteAppMemberCAzApplicationGroup::AddAppNonMemberCAzApplicationGroup::DeleteAppNonMemberCAzApplicationGroup::AddMemberCAzApplicationGroup::DeleteMemberCAzApplicationGroup::AddMemberNameCAzApplicationGroup::DeleteMemberNameCAzApplicationGroup::AddNonMemberCAzApplicationGroup::DeleteNonMemberCAzApplicationGroup::AddNonMemberNameCAzApplicationGroup::DeleteNonMemberNameCAzApplicationGroup::get_WritableCAzApplicationGroup::GetPropertyCAzApplicationGroup::SetPropertyCAzApplicationGroup::AddPropertyItemCAzApplicationGroup::DeletePropertyItemEnter CAzApplicationGroup::Submit: lFlags=%d Leave CAzApplicationGroup::Submit: return HRESULT value=0x%lx Enter CAzApplicationGroup::RoleAssignments: bstrScopeName=%s bRecusive=%d Leave CAzApplicationGroup::RoleAssignments: return HRESULT value=0x%lx Enter CAzApplicationGroups::_Init CAzApplicationGroups::_InitLeave CAzApplicationGroups::_Init: return HRESULT value=0x%lx CAzRole constructor called CAzRole destructor called Enter CAzRole::_Init Leave CAzRole::_Init: return HRESULT value=0x%lx CAzRole::get_DescriptionCAzRole::put_DescriptionCAzRole::get_NameCAzRole::put_NameCAzRole::get_ApplicationDataCAzRole::put_ApplicationDataCAzRole::get_AppMembersCAzRole::get_MembersCAzRole::get_MembersNameCAzRole::get_OperationsCAzRole::get_TasksCAzRole::AddAppMemberCAzRole::DeleteAppMemberCAzRole::AddTaskCAzRole::DeleteTaskCAzRole::AddOperationCAzRole::DeleteOperationCAzRole::AddMemberCAzRole::DeleteMemberCAzRole::AddMemberNameCAzRole::DeleteMemberNameCAzRole::get_WritableCAzRole::GetPropertyCAzRole::SetPropertyCAzRole::AddPropertyItemCAzRole::DeletePropertyItemCAzRole::AddRoleDefinitionCAzRole::DeleteRoleDefinitionEnter CAzRole::get_RoleDefinitions CAzRole::get_RoleDefinitionsLeave CAzRole::get_RoleDefinitions: return HRESULT value=0x%lx Enter CAzRole::get_Scope Leave CAzRole::get_Scope: return HRESULT value=0x%lx Enter CAzRole::Submit lFlags=%d Leave CAzRole::Submit: return HRESULT value=0x%lx Enter CAzRoles::_Init CAzRoles::_InitLeave CAzRoles::_Init: return HRESULT value=0x%lx CAzRoleAssignments constructor called. Enter CAzRoleAssignments::_InitRolesForGivenObj: bstrScopeName=%s bRecursive=%d Leave CAzRoleAssignments::_InitRolesForGivenObj: return HRESULT value=0x%lx Enter CAzRoleAssignments::GetRoleAssigmentObj bstrScopeName=%s ScopeFlags=%d CAzRoleAssignments::GetRoleAssigmentObjLeave CAzRoleAssignments::GetRoleAssigmentObj: return HRESULT value=0x%lx CAzClientContext constructor called. CAzClientContext destructor called. Enter CAzClientContext::AccessCheck2 bstrObjectName=%s, bstrScopeName=%s lOperation=%d CAzClientContext::AccessCheck2 receives NULL plResult parameter. Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx plResult=NULL Leave CAzClientContext::AccessCheck2: return HRESULT value=0x%lx *plResult=%d Enter CAzClientContext::AccessCheck bstrObjectName=%s, bstrScopeNames=%s varOperations=%s Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=%s Leave CAzClientContext::AccessCheck: return HRESULT value=0x%lx *pvarResults=NULL Enter CAzClientContext::GetAssignedScopesPage lOptions=%d PageSize=%d Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx *pvarScopeNames=%s Leave CAzClientContext::GetAssignedScopesPage: return HRESULT value=0x%lx pvarScopeNames=NULL Enter CAzClientContext::GetOperations bstrScopeName=%s Leave CAzClientContext::GetOperations: return HRESULT value=0x%lx Enter CAzClientContext::GetTasks bstrScopeName=%s Leave CAzClientContext::GetTasks: return HRESULT value=0x%lx Enter CAzClientContext::IsInRoleAssignment bstrScopeName=%s bstrRoleName=%s Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx pbIsInRole=NULL Leave CAzClientContext::IsInRoleAssignment: return HRESULT value=0x%lx *pbIsInRole=%d Enter CAzClientContext::GetRoles bstrScopeName=%s Leave CAzClientContext::GetRoles: return HRESULT value=0x%lx Enter CAzClientContext::GetBusinessRuleString Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx pbstrBusinessRuleString=NULL Leave CAzClientContext::GetBusinessRuleString: return HRESULT value=0x%lx *pbstrBusinessRuleString=%s CAzClientContext::get_UserDnCAzClientContext::get_UserSamCompatCAzClientContext::get_UserDisplayCAzClientContext::get_UserGuidCAzClientContext::get_UserCanonicalCAzBizRuleContext ~CAzBizRuleContext CAzBizRuleContext::put_BusinessRuleResult: %ld CAzBizRuleContext::put_BusinessRuleString: %ws CAzBizRuleContext::get_BusinessRuleString: %ws CAzBizRuleContext::GetParameter: %ls CAzBizRuleContext::GetParameter: %ls: Parameter not passed in. CAzBizRuleContext::SetAccessCheckContext SYSTEM\CurrentControlSet\Control\LSA\AzRolesUseStrongLockingSoftware\Microsoft\AzMan\LoggingFlagsAPPDATA\Microsoft\AzMan\AzManDebug_%d.log AzMan log file Process Name: Current User Name: Current System Time: %02u/%02u/%02u %02u:%02u:%02u S-1-3-4AzpAzStoreGetProperty: invalid prop id %ld SetProperty: Object doesn't support dirty bit 0x%lx IsNormalFlags(_Flags) = TRUE (_GenericObject->DirtyBits & _DirtyBit) = 0 IsRefreshFlags(_Flags) = TRUE AzpAzStoreManagerSetProperty: domain timeout too small %ld AzpAzStoreManagerSetProperty: script engine timeout too small %ld AzpAzStoreManagerSetProperty: max script engines too small %ld AzpAzStoreManagerSetProperty: invalid prop id %ld AzInitialize: Reserved != 0 AzInitialize: Invalid flags 0x%lx AzInitialize: Failed to Initialize Audit system: %ld AzAuthorizationStoreDelete: Reserved != 0 AzCloseHandle: Reserved != 0 AzAuthorizationStore in AzCloseHandle refAzpAddObjectToGuidMap: objects already in mapvector too long%s:%dAzApplicationGetProperty: invalid prop id %ld AzpApplicationSetProperty: cannot convert CLSID %ws %ld AzpApplicationSetProperty: invalid prop id %ld AzApplicationClose: Failed to capture application name: %ld AzApplicationClose: Cannot reference application %ws: %ld AzApplicationClose: Cannot reload children on unload failure: %ld SOFTWARE\Microsoft\AzMan\BizRuleEnabledApplicationsAvoided script engine in non-base thread. Using free script engine from non-base thread. ReuseEngine failed: 0x%lx Using free script engine. Using clone of running script engine. new CScriptEngine failed: 0x%lx ScriptEngine->Init failed: 0x%lx Using new script engine. Engine doesn't support reset: 0x%lx Script changed while engine was running Script LRU'ed out: %ld Script Freed from free script list AzpGetScriptEngine failed: 0x%lx, %ld RunScript failed: 0x%lx, %ld CoInitializeEx failed: 0x%lx, %ld Script Timed out. CScriptEngine ~CScriptEngine CScriptEngine::InitializeScriptEngine Failed to get scripting engine CLSID: 0x%lx Failed to create scripting engine: 0x%lx IActiveScript::QueryInterface()Exception: %s: 0x%lx Engine doesn't support IActiveScriptParse: 0x%lx Failed to create AzBizRuleContext instance: 0x%lx IActiveScript::GetCurrentScriptThreadID()Error calling GetCurrentScriptThreadID: 0x%lx Set ThreadId to: 0x%lx 0x%lx IActiveScript::SetScriptSite()Error calling SetScriptSite: 0x%lx IActiveScriptParse::InitNew()Error calling InitNew: 0x%lx AzBizRuleContextIActiveScript::AddNamedItem()Failed to AddNamedItem: 0x%lx IActiveScriptParse::ParseScriptText()Failed to ParseScriptText: 0x%lx Remap error to: 0x%lx CScriptEngine::RunScript RunScript took an exception: 0x%lx Script took an exception: 0x%lx Failed to SetScriptState(STARTED): 0x%lx Script from access check to caller: 0x%lx Return script error to caller: 0x%lx Cannot DeleteTimerQueurTimer: %ld CScriptEngine::InterruptScript IActiveScript::InterruptScriptThread()CScriptEngine::ResetToUninitialized IActiveScriptParse::Release()IActiveScript::SetScriptState()Failed to SetScriptState(INITIALIZED): 0x%lx CScriptEngine::ReuseEngine IActiveScript::GetScriptState()Failed to GetScriptState: 0x%lx Failed to SetScriptState(UNINITIALIZED): 0x%lx Changed ThreadId to: 0x%lx 0x%lx CScriptEngine::IsBaseThread CScriptEngine::FinalRelease IActiveScript::Close()Cannot CloseEngine: 0x%lx IActiveScript::Release()CScriptEngine::InsertHeadList CScriptEngine::RemoveListEntry CScriptEngine::InsertHeadLruList CScriptEngine::RemoveLruListEntry CScriptEngine::QueryInterface->IUnknown IActiveScriptSite Unsupported Interface: CScriptEngine::AddRef %ld CScriptEngine::Release %ld CScriptEngine::GetLCID CScriptEngine::GetItemInfo: %ws GetItemInfo took an exception: 0x%lx CScriptEngine::GetDocVersionString CScriptEngine::OnScriptTerminate CScriptEngine::OnStateChange:State: Uninitialized. State: Initialized. State: Started. State: Connected. State: Disconnected. State: Closed. CScriptEngine::OnScriptError Script Error: Code: 0x%lx %ld Src: %ws File: %ws Desc: %ws CScriptEngine::OnEnterScript CScriptEngine::OnLeaveScript CAzBizRuleParamInternal::AddParameters: Can't get name lbound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get value lbound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get name ubound 0x%lx CAzBizRuleParamInternal::AddParameters: Can't get value ubound 0x%lx CAzBizRuleParamInternal::AddParameters: Array bounds don't match %ld %ld %ld %ld CAzBizRuleParamInternal::AddParameters: Can't access ParameterNames 0x%lx CAzBizRuleParamInternal::AddParameters: Can't access ParameterValues 0x%lx CAzBizRuleParameters::AddParameters: Parameter %ld isn't a VT_BSTR CAzBizRuleParameters::AddParameters: Parameter %ws should have an interface value AzpCaptureBizRuleInterfaces: Can't get name lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get value lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get interfaces lbound 0x%lx AzpCaptureBizRuleInterfaces: Can't get name ubound 0x%lx AzpCaptureBizRuleInterfaces: Can't get value ubound 0x%lx AzpCaptureBizRuleInterfaces: Can't get interfaces ubound 0x%lx AzpCaptureBizRuleInterfaces: Array bounds don't match %ld %ld %ld %ld %ld %ld AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access ParameterNames 0x%lx AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Flags 0x%lx AzpCaptureBizRuleInterfaces::AddInterfaces: Can't access Interfaces 0x%lx GroupRole-AzpClientContextFree: AzpClientContextGenerateDeleteAudit failed with %ld AzpGetUserNameEx: no cached token handle AzpGetUserNameEx: Cannot get token statistics: %ld AzpGetUserNameEx: Cannot GetThreadToken %ld AzpGetUserNameEx: Cannot SetThreadToken %ld AzpGetUserNameEx: Cannot GetUserNameExW %ld AzpGetUserNameEx: Cannot SetThreadToken (revert) %ld AzpClientContextGetProperty: invalid opcode %ld AzpClientContextGetProperty: Cannot get token statistics: %ld %ws\%wsAzpClientContextGetProperty: Cannot translate name: %ld AzpClientContextSetProperty: invalid prop id %ld AzpComputeAccountDn: AuthzGetInformationFromContext failed %ld AzpComputeAccountDn: SafeAllocaAllocate failed %ld AzpComputeAccountDn: AzpAllocateHeap failed %ld <Sid=>AzpQueryUserDN: ClientContext is missing LdapQueryDN from a standalone machine. AzpQueryUserDN: ClientContext (AZP_CONTEXT_CREATED_FROM_SID) is missing LdapQueryDN. distinguishedName(objectClass=user)AzpCheckGroupMembershipLdap: %ws AzpCheckGroupMembershipLdap: %ws: User is in NT 4 domain or local account: Membership is %ld AzpCheckGroupMembershipLdap: %ws: AzpGetUserNameEx failed %ld AzpCheckGroupMembershipLdap: ClientContext is missing LdapQueryDN. AzpCheckGroupMembershipLdap: %ws: DsGetDcName failed %ld ObjectClassAzpCheckGroupMembershipLdap: %ws: ldap_search failed on %ws: %ld: %s AzpCheckGroupMembershipLdap: %ws: ldap_count_entries failed on %ws: %ld: %s AzpCheckGroupMembershipLdap: %ws: ldap_search worked on %ws: Membership is %ld (objectClass=*)AzpCheckGroupMembershipLdapForLdapUrl: %ws AzpQueryUserDN failed. AzpCheckGroupMembershipLdapForLdapUrl:invalid LDAP query syntaxAzpCheckGroupMembershipLdapForLdapUrl: ldap_init failed on %ws: %ld: %s AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: ldap_connect failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpCheckGroupMembershipLdapForLdapUrl: ldap_bind failed on %ws: %ld: %s AzpCheckGroupMembershipOne: %ws AzpCheckGroupMembershipOne: %ws: Create cache entry AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer found in cache AzpCheckGroupMembershipOne: %ws: Is a basic group AzpCheckGroupMembershipOne: %ws: Cannot AzptCheckObjecSidMembership (non member) %ld AzpCheckGroupMembershipOne: %ws: Is non member via NT Sid AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) %ld AzpCheckGroupMembershipOne: %ws: Is non member via app group AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) %ld AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (member) extended status: %ld AzpCheckGroupMembershipOne: %ws: Cannot AzpCheckGroupMembership (non member) extended status: %ld AzpCheckGroupMembershipOne: %ws: %ld: %ld: Answer computed AzpCheckGroupMembershipOne: %ws: Avoid ldapquery group AzpCheckGroupMembershipOne: ClientContext is missing LdapQueryDNAzpCheckGroupMembershipOne: %ws: Is an ldapquery group AzpCheckGroupMembershipOne: %ws: Is an invalid group type Task referenceAzpCaptureBizRuleInterfaces: Names is NULL but Flags or Interfaces isn't AzpCaptureBizRuleInterfaces: Flags or Interfaces is NULL but Names isn't AzpWalkOpsAndTasks: %ws: %ws: All operations have been processed %ld. AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation granted AzpWalkOpsAndTasks: %ws: %ws: %ws: Operation extended failure %ld AzInitializeContextFromToken: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromToken: Cannot ObCommonCreateObject %ld AzInitializeContextFromToken: Cannot OpenProcessToken %ld AzInitializeContextFromToken: Cannot DuplicateTokenEx %ld AzInitializeContextFromToken: Cannot OpenThreadToken %ld AzInitializeContextFromToken: GetTokenInformation failed with %ld AzInitializeContextFromToken: Cannot AuthzInitializeContextFromToken %ld AzpGenerateContextCreateAudit: Cannot ObCommonCreateObject %ld AzManAPIKerberosAzInitializeContextFromName: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromName: Cannot AzInitializeFromToken %ld AzInitializeContextFromName: Cannot ObCommonCreateObject %ld AzInitializeContextFromName: Cannot allocate LUID %ld AzInitializeContextFromName: LookupAccoutName failed with %ld AzInitializeContextFromName: Invalid user type - expected SIdTypeUser, got %ld AzInitializeContextFromStringSid: Cannot initialize context since store is in manage mode %ld AzInitializeContextFromStringSid: ConvertSidStringToSid failed with %ld AzInitializeContextFromStringSid: LookupAccountSid failed with %ld AzInitializeContextFromStringSid: Invalid user type - expected SIdTypeUser, got %ld AzInitializeContextFromStringSid: Cannot ObCommonCreateObject %ld AzInitializeContextFromStringSid: Cannot allocate LUID %ld AzInitializeContextFromStringSid: CopySid failed with %ld AzInitializeContextFromStringSid: Cannot AuthzInitializeContextFromStringSid %ld S-1-0-0AzInitializeContext: Cannot initialize context since store is in manage mode %ld AzInitializeContext: Cannot initialize context with null audit identifying string %ld AzInitializeContext: ConvertSidStringToSid for null SID failed with %ld AzInitializeContext: Cannot ObCommonCreateObject %ld AzInitializeContext: Cannot allocate LUID %ld AzInitializeContext: CopySid for null SID failed with %ld AzInitializeContext: Cannot AuthzInitializeContext %ld AzAccessCheck: %ws: GroupEvalSerialNumber changed from %ld to %ld AzAccessCheck: Failed to load children for %ws: %ldAzAccessCheck: %ws: invalid OperationCount %ld AzAccessCheck: %ws: %ws: There are no roles for this scope Role referenceAzAccessCheck: This role %ws is not the requested role %ws AzAccessCheck: %ws: %ws: No operations for this role apply AzAccessCheck: %ws: %ws: No roles have applicable operations %ld. AzContextAccessCheck: Starting Access Check loops AzAccessCheck: %ws: %ws: All roles have been processed %ld. AzAccessCheck: %ws: %ws: All operations have been processed %ld. AzAccessCheck: %ws: %ws: Process role AzAccessCheck: %ws: %ws: AzpWalkOpsAndTasks failed %ld AzAccessCheck: %ws: %ws: CheckSidMembership of role AzAccessCheck: %ws: %ws: CheckSidMembership failed %ld AzAccessCheck: %ws: %ws: CheckSidMembership is %ld AzAccessCheck: %ws: %ws: CheckGroupMembership of role AzAccessCheck: %ws: %ws: CheckGroupMembership failed %ld AzAccessCheck: %ws: %ws: CheckGroupMembership extended status %ld AzAccessCheck: %ws: %ws: CheckGroupMembership is %ld AzAccessCheck: %ws: %ws: Role finished being processed AzAccessCheck: %ws: %ws: Role finished being processed due to ACCESS_DENIED AzAccessCheck: %ws: AzpAccessCheckGenerateAudit failed with %ld AzpCheckRolesMembersip: %ws: CheckSidMembership of role AzpCheckRolesMembersip: %ws: CheckSidMembership failed %ld AzpCheckRolesMembersip: %ws: CheckSidMembership is %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership of role AzpCheckRolesMembersip: %ws: CheckGroupMembership failed %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership is %ld AzpCheckRolesMembersip: %ws: CheckGroupMembership extended status %ld AzpCheckRolesMembersip: %ws: Role finished being processed Role/Group referenceAzpCheckGroupMembershipOne failed. 0x%lx %ws (%ld): Domain ref 0x%lx %ws (%ld): Domain deref AzpAllocateDc: ldap_init failed on %ws: %ld: %s AzpAllocateDc: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpAllocateDc: ldap_connect failed on %ws: %ld AzpAllocateDc: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpAllocateDc: ldap_bind failed on %ws: %ld: %s 0x%lx %ws (%ld): DC Allocaote 0x%lx %ws (%ld): DC ref 0x%lx %ws (%ld): DC deref AzAuthorizationStore in ObCloseHandle refAllocate objectChild handle refHandle ref0x%lx %ld (%ld): Open Handle Authorization Store Handle ref0x%lx %ld (%ld): Close Handle Authorization Store Handle derefHandle derefChild handle derefObDecrHandleRefCount: Cannot reload children on failure of unload: %ld 0x%lx: NULL handle is invalid 0x%lx %ld: Handle Object type is too large. 0x%lx %ld: Handle has no handle reference count. 0x%lx %ld: Handle has no ParentGenericObjectHead. 0x%lx %ld: Object is deleted. 0x%lx %ld: Object type doesn't match parent. 0x%lx %ld: Sequence number doesn't match parent. 0x%lx: AV accessing handle ObReferenceObjectByName (by guid): Ref by name0x%lx: NULL handle not allowed. 0x%lx %ld: Object Type not local object type Ref by Handle0x%lx %ld: Handle not in list. Deref "*/:<>?\| ObCreateObject: %ws ObCommonCreateObject: Reserved != 0 ObCommonOpenObject: Reserved != 0 ObCommonEnumObjects: Reserved != 0 ObCommonGetProperty: Reserved != 0 ObCommonGetProperty: Object has no name ObCommonGetProperty: Object has no description ObCommonGetProperty:Object has no application data ObCommonGetProperty: Object has no generate-audits data ObCommonGetProperty: Object has no apply-store-sacl data ObCommonGetProperty:Object has no apply-store-sacl data ObCommonGetProperty: No get property routine. ObSetProperty: no set property routine: %ld %ld ObSetProperty: OpCacheSerialNumber set to %ld ObCommonDeleteObject: Reserved != 0 0x%lx: 0x%lx: %ld: ObFreeDeltaArray 0x%lx: 0x%lx: ObInitObjectList ObRemoveObjectListLink: OpCacheSerialNumber set to %ld AzpeAddPropertyItemSid: AzpAllocateHeap failed %ld AzpeAddPropertyItemSid: duplicate SIDAzpeAddPropertyItemSid: set::insert failed %ld ObAddPropertyItem (by guid): ObAddPropertyItem: Cannot set creator owner sid ObAddPropertyItem: Cannot set creator group sid Reference to self ObAddPropertyItem: GroupEvalSerialNumber set to %ld ObAddPropertyItem: OpCacheSerialNumber set to %ld AzAddPropertyItem: Reserved != 0 AzAddPropertyItem: invalid prop id %ld ObRemovePropertyItem: GroupEvalSerialNumber set to %ld AzRemovePropertyItem: Reserved != 0 && Reserved != 1 AzRemovePropertyItem: invalid prop id %ld 0x%lx: 0x%lx: %ld: ObRemoveObjectListLinks ObClearObjectList PropertyID %d 0x%lx: 0x%lx: ObFreeObjectList 0x%lx: 0x%lx: Free array Reference from NewNameAzpGetTokenUserGroupsFromAuthzContext: NULL ppTokenUser or NULL ppTokenGroups not allowed %ld AzpGetTokenUserGroupsFromAuthzContext: AuthzGetInformationFromContext failed %ld AzpGetTokenUserGroupsFromAuthzContext: SafeAllocaAllocate failed %ld AzpGetSidsFromUserGroups: null pSidList or pdwListSize AzpGetSidsFromUserGroups: out of memory. AzpIsSidInList: pbAnswer must not be NULL. AzpIsSidInList: sidListFlag can only be SID_MEMBER_LIST(1) or SID_NON_MEMBER_LIST(2) . AzpIsSidInList: hObject is not Role or Group. AzpIsSidInList: Role does not have non-member SID list. AzpAuthzCheckSid: hAuthzHandle must not be NULL. AzpAuthzCheckSid: pbIsGood must not be NULL. AzpAuthzCheckSid: pSid must not be NULL. AzpSidsImplyObjectMembership: both pbAnswer and pbIsNonMember must not be NULL. AzpIsUserAuthzMember: pbAnswer must not be NULL. AzpGetClientContextSids: failed. a@@@@`00H 8AzpGroupInit: memory allocation failed %ld AzpGroupGetProperty: invalid opcode %ld AzpGroupGetProperty: cannot set group type to ldap query if group has membership. AzpGroupGetProperty: cannot set group type to basic if group has bizrule string. AzpGroupGetProperty: cannot set group type to basic if group has ldap query string. AzpGroupGetProperty: This version of the store doesn't support creating bizrule group. AzpGroupGetProperty: cannot set group type to bizrule if group has ldap query string. AzpGroupGetProperty: invalid grouptype %ld VBScriptAzpGroupSetProperty: can't set Bizrule before group type AzpGroupSetProperty: Must set language before bizrule AzpGroupSetProperty: can't set Bizrule type before group type JScriptAzpGroupSetProperty: invalid language %ws AzpGroupSetProperty: can't set Bizrule Path before group type AzpGroupSetProperty: can't set ldap query before group type ldap://invalid LDAP query syntaxAzpGroupSetProperty: GroupEvalSerialNumber set to %ld AzpGroupSetProperty: invalid propid %ld AzpGroupAddPropertyItem: invalid group type %ld AzpRoleInit: memory allocation failed %ld AzpRoleGetProperty: invalid prop id %ld TrueFalseBasicLdapQueryBizruleMSXMLDomainTimeoutScriptTimeoutMaxScriptsAuditsApplicationDataMajorVersionMinorVersionAzApplicationAzApplicationGroupApplicationCLSIDApplicationVersionAzOperationAzTaskAzScopeAzRoleOperationLinkOperationIDTaskLinkBizRuleImportedPathRoleDefinitionBizRuleLanguageBizRuleAppMemberLinkAppNonMemberLinkGroupTypeMemberNonMemberAzAdminManagerxml file %ws exists. xml file %ws doesn't exist. IXMLDOMDocument2::load failed. HRESULT = %d. Intepreted as 'file not found'.IXMLDOMDocument2::load failed. HRESULT = %dCoCreating IXMLDOMDocument2 failed. HRESULT = %dXmlCheckSecurityPrivilege: invalid full path '%ws' XmlCheckSecurityPrivilege: path is too long '%ws' ::$dataAzpChangeSinglePrivilege failed to reset to original. Error code: %d(myXmlSetNodeAttribute)pNode = 0x%lx (myXmlSubmitObjectAttribute)pNode = 0x%lx %dNameGuidDescription <?xml version="1.0" encoding="utf-8" ?> <AzAdminManager MajorVersion="%d" MinorVersion="%d" Guid="%s"> </AzAdminManager>pDoc->loadXML%s error occured: 0x%lx(%ws) %s error occured: 0x%lx fileSelectionLanguagedefault SelectionLanguage=%ws XPath//%s[.="%s"]XPath query(link delete)=%ws Not found %s under tag %ws hr = 0x%lx, pObjectNode(from myXmlGetNamedGuidNode) = 0x%lx A new element node, 0x%lx, is added for %s pObjectNode, 0x%lx, is released //*/%s[@%s="%s"]XPath query(refresh)=%ws 1.2.840.113556.1.4.8051.2.840.113556.1.4.14131.2.840.113556.1.4.529msDS-AzApplicationNamecnmsDS-AzScopeNamenamedescriptionmsDS-AzApplicationDatamsDS-AzGenerateAuditsmsDS-AzDomainTimeoutmsDS-AzScriptEngineCacheMaxmsDS-AzScriptTimeoutmsDS-AzMajorVersionmsDS-AzMinorVersionallowedAttributesEffectiveallowedChildClassesEffectiveobjectVersionuSNChangedobjectGUIDmsDS-AzClassIdmsDS-AzApplicationVersionmsDS-AzOperationIDmsDS-AzBizRulemsDS-AzBizRuleLanguagemsDS-AzLastImportedBizRulePathmsDS-OperationsForAzTaskmsDS-TasksForAzTaskmsDS-AzTaskIsRoleDefinitionmsDS-MembersForAzRolemsDS-OperationsForAzRolemsDS-TasksForAzRolegroupTypemsDS-AzLDAPQuerymembermsDS-NonMembersmsDS-AzAdminManagermsDS-AzApplicationmsDS-AzOperationmsDS-AzTaskmsDS-AzScopegroupmsDS-AzRolecontainerAzOpObjectContainer-AzTaskObjectContainer-AzGroupObjectContainer-AzRoleObjectContainer-(objectClass=msDS-AzAdminManager)(objectClass=msDS-AzApplication)(objectClass=msDS-AzOperation)(objectClass=msDS-AzTask)(objectClass=msDS-AzScope)(objectClass=group)(objectClass=msDS-AzRole)MSLDAPAzpADSetObjectOptions: AzpeSetObjectOptions failed: %ld AzpADPersistOpenEx: AzpLdapCrackUrl failed on %ws: %ld AzpADPersistOpenEx: ldap_init failed on %ws: %ld: %s AzpADPersistOpenEx: AzpADSetDefaultLdapOptions failed on %ws: %ld AzpADPersistOpenEx: ldap_connect failed on %ws: %ld AzpADPersistOpenEx: AzpADSetLdapEncryptionOption failed on %ws: %ld AzpADPersistOpenEx: ldap_bind failed on %ws: %ld AzpADPersistOpenEx: AzpCheckDomainVersion failed on %ws: %ldCN=AzpADPersistOpenEx: ldap_get_option failed : %ld AzpADPersistOpenEx: AzpReadADStore failed: %ld BizRule group not supported, please update the schema AzpADPersistUpdateChildrenCache: AzpADBuildDN failed: %ld AzpADPersistUpdateChildrenCache: failed to init paged search handle: %ld AzpADPersistUpdateChildrenCache: failed to read paged results: %ld AzpADReadHasChildrenObject: Reading of Child container objectfailed: %ld AzpADPersistSubmit: AzpADStoreHasUpdate failed: %ld AzpADPersistSubmit: AzpADBuildDN failed:%ld AzpADPersistSubmit: AzpADBuildNameSearchFilter failed:%ld Submitting a new object with name that has been submitted by other instances of azstore objectAzpADPersistSubmit: AzpADBuildDN failed: %ld AzpADPersistSubmit: Failed to delete object %ws: %ld AzpADPersistSubmit: Update failed for object %ws: %ld AzpADPersistRefresh: AzpADBuildDN failed: %ld AzpADPersistRefresh: Search on object failed:%ld AzpADPersistRefresh: AzpReadADStoreObject failedfor %s: %ld AzpADPersistWritable: %ws attribute isn't writable AzpADPersistWritable: Error calling AzpADPersistChildCreate: %ld AdCheckSecurityPrivilege: AzpADReadNTSecurityDescriptor failed: %ld AzpADPersistOpenEx: AzpCheckVersions failed with error: %ld AzpReadADStoreObject failed: %ld AzpReadADStore: AzpADReadAzStoreChildren failed: %ld AzpADReadAzStoreChildren: Failed to read Application Groups: %ld AzpADReadAzStoreChildren: Failed to create paged result handle: %ld AzpADReadAzStoreChildren: AzpADReadPagedResult failed: %ld AzpADReadPagedResult: Reading of child objectfailed: %ld AzpADReadPagedResult: Updating children failed: %ld AzpADReadPagedResult: Failed to read paged LDAP result: %ld ,AzpReadADObjectContainer: Reading of child objectfailed: %ld AzpReadADStoreForCommonData: AzpInitializeObjectName failed: %ld AzpReadADStoreForCommonData: AzpeCreateObject failed: %ld AzpReadADStoreForCommonData: AzpADCreateGuidCN failed for %ws: %ld AzpReadADStoreForCommonData: Read description failed: %ld AzpUpdateObjectGuid: Failed to allocate memoryAzpReadADStoreObject: Object creation and common data read failed: %ld AzpReadAttributeAndSetProperty failed: %ld AzpReadADStoreObject: Failed to apply policy ACLs: %ld AzpReadADStoreObject: AzpADPersistWritable failed: %ld AzpADSetObjectOptions failed: %ld <Unknown>AzpReadAttributeAndSetProperty:AzpADReadLinkedAttribute failed for attribute %ws of %ws: %ld TRUE%s;range=%d-%d%s;range=%d-*AzpReadLinkedAttribute:AzpADParseLinkedAttributeValue failed for %ws: %ld AzpReadAttributeAndSetProperty: AzpeAddPropertyItem failed: %ld AzpADReadAttributeAndSetProperty:AzpeAddPropertyItemGuid failed on: %ld CN=AZGROUPOBJECTCONTAINER-CN=FOREIGNSECURITYPRINCIPALS,AzpADParseLinkedAttributeValue: ldap_set_option LDAP_OPT_REFERRALS failed: %ld AzpADParseLinkedAttributeValue: Failed to run search for group type for %ws: %ld <GUID=<SID=AzpApplyPolicyAcls: AzpADReadNTSecurityDescriptor failed :%ld AzpADApplyPolicyAcls: AzpeSetSecurityDescriptorIntoCache failed:: %ld AzpUpdateADObject: AzpADUpdateObjectAcls failed for %ws: %ld AzpUpdateADObject: Read writable failed: %ld AzpUpdateADObject: AzpGetAttrsForCreateObject failed for %ws: %ld AzpUpdateADObject: AzpGetADCommonAttrs failed: %ld AzpUpdateADObject: Get property failed for %s: %ld AzpUpdateADObject: Failed to add/modify %ws : %ld %ld AzpUpdateADObject: UuidCreate failed for %s: %ld AzpUpdateADObject: Failed to search object %s: %ld AzpUpdateADObject: AzpSetGuidAndOptions failed for %s: %ld objectClassAzpCreateADObject: Failed to add object %ws: %ld %ld AzpUpdateADCommonAttrs: AzpeGetProperty failed for object name: %ld AzpADUpdateCommonAttrs: Failed to rename %ws: %ld AzpADUpdateCommonAttrs: Get property failed : %ld AzpGetSpecificProperty: AzpADHandleSubmitLinkedAttribute failed for %s: %ld AzpADGetSpecificProperty: Get Property failed: %ld FALSEAzpHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld AzpADHandleSubmitLinkedAttribute: AzpeGetDeltaArray failed for %ws: %ld AzpHandleSubmitLinkedAttribute: ConvertSidToStringSid failed: %ld AzpHandleSubmitLinkedAttribute: UuidToString failed: %ld AzpADUpdateObjectAcls: AzpADReadNTSecurityDescriptor failed :%ld AzpADUpdateObjectAcls: AzpeGetSecurityDescriptorFromCache failed: %ld AzpADUpdateObjectAcls: AzpADStampSD failed with SACL/DACL: %ld AzpADUpdateObjectAcls: AzpApplyPolicyAcls failed with DACL: %ld AzpADBuildDN: AzpADBuildDNForBuiltinObject failed:%ld AzpADBuildDN: AzpADObjectContainerRDN failed:%ld AzpADBuildDN: AzpADBuildChildObjectDN failed for %s: %ld AzpADBuildDN: AzpADGetCNForDN failed: %ld AzpADBuildDN: AzpADObjectContainerRDN failed for %ws: %ld AzpADBuildDN: AzpGetCNForDN failed: %ld AzpGetCNForDN: Failed to quote RDN for object %ws: %ld mayContainsystemMayContainschemaNamingContextdefaultNamingContextsupportedCapabilities1.2.840.113556.1.4.1851msDS-Behavior-VersionNTSecurityDescriptor1.2.840.113556.1.4.801AzpADReadNTSecurityDescriptor: AzpADBuildDN failed: %ld AzpADReadNTSecurityDescriptor: Failed to perform search on %ws: %ld AzpADStampSD: Failed to update security descriptor on %ws: %ld ldap Error:%ld Extended Error: %ws 1(&(objectClass=msds-azapplication)(msds-azapplicationname=%s))(&(objectClass=msds-azscope)(msds-azscopename=%s))z 0IAzScopeGetProperty: invalid prop id %ld AzTaskGetProperty: scope is delegated - bizrule not allowed %ld AzTaskGetProperty: invalid prop id %ld AzpTaskSetProperty: Must set language before bizrule AzpTaskSetProperty: invalid language %ws AzpTaskSetProperty: invalid prop id %ld AzpOperationGetProperty: invalid prop id %ld OperationHash: objects already in hashAzpOperationSetProperty: Operation Id too small %ld AzpOperationSetProperty: Operation ID %ld is already used. AzpOperationSetProperty: invalid prop id %ld Ref by operation idlist too longAzpCheckOperationCache: Operation cache avoided since interfaces passed in AzpCheckOperationCache: OpCacheSerialNumber changed from %ld to %ld AzpCheckOperationCache: Parameter count changed from previous call %ld %ld AzpCheckOperationCache: Parameter changed from previous call AzpCheckOperationCache: '%ws/%ws' found in operation cache AzpUpdateOperationCache: No operations to cache AzpUpdateOperationCache: Added '%ws/%ws' %ld to operation cache Scope CacheOperation CacheAzpPersistReconcileOne (by guid): AzpPersistReconcileOne: ObAddPropertyItem failed %ld AzpPersistReconcileOne: %ws %ld 0x%lx 0x%lx AzpPersistReconcile: Cannot refresh object: %ws %ld AzpPersistReconcile: Cannot reconcile object: %ws %ld %ld MSSQLSYSTEM\CurrentControlSet\Control\LSA\AzRoles\ProvidersAzpPersistDetermineProvider: Open Provider reg key at 'HKLM\%ws' AzpPersistDetermineProvider: Cannot open Provider reg key at 'HKLM\%ws' %ld ProviderDllAzpPersistDetermineProvider: Cannot open Provider reg value at 'HKLM\%ws\%ws' %ld AzpPersistDetermineProvider: Cannot load libary '%ws' %ld AzPersistProviderInitializeAzpPersistDetermineProvider: libary '%ws' does not export '%s': %ld AzpPersistReconcile: Cannot reconcile object: %ws %ld AzpeCreateObject: Cannot find Object Head: %ld: %ld AzpeSetProperty: Property ID for non-scalar: %ld AzpeSetObjectOptions: bad options mask 0x%lx AzpeGetProperty: Property ID for non-scalar: %ld AzpeGetDeltaArray: invalid prop id %ld AzpeAddPropertyItemSid: called from submit: %ld %ld %ld AzpeAddPropertyItemSid: invalid prop id %ld AzpeAddPropertyItemSid: SID not valid AzpeAddPropertyItemGuid: invalid prop id %ld AzpeGetObjectByGuid receives NULL parameter pFoundObjectHandle. AzpGetChildGenericHead cannot find the child list head for type=%d. <Invalid Sid>0x%lx %ld (%ld) %ws: %s [AZROLES] %02u/%02u %02u:%02u:%02u HANDLEOBJLISTINVPARMPERSISTOBJREFDISPATCHACCESSDOMREFXMLADSQLSCRIPTCRITICALFUNCALLUNKNOWN[%s] Error Message: WideCharToMultiByte failed Failed to create log entry: StringCchVPrintfA failure%AZ_CLIENT_DN%AzpParseLDAPUrl: NULL Pointer AzpParseLDAPUrl: URL is %ws Error allocating memory AzpParseLDAPUrl: url doesn't begin with ldap:// AzpParseLDAPUrl: Host name missing Error unescaping host name: %ws Error unescaping DN:<%ws> AzpParseLDAPUrl: missing DN *AzpParseLDAPUrl: missing Attribute baseonesubAzpUnEscapeString: InternetCanonicalizeUrl NULL Param AzpUnEscapeString: Out of memory AzpUnEscapeString: UrlUnescape failed with %x AzpUnEscapeString: First call to UrlUnescape failed with %x AzpGetCurrentUserSid failed: Status = %x AzpCaptureString: NULL not ok AzpCaptureString: zero length not ok AzpCaptureString: string too long %ld %ld %ws AzpCaptureString: SID not valid 0x%lx: 0x%lx: Free old array 0x%lx: 0x%lx: Allocate array AzpSafeArrayPointerFromVariant: parameter is not an array 0x%lx. AzpSafeArrayPointerFromVariant: Array %lx isn't single dimension array AzpSafeArrayPointerFromVariant: Array isn't array of VARIANT 0x%lx %lx AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_REFERRALS failed: %ld AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_AREC_EXCLUSIVE failed: %ld AzpADSetDefaultLdapOptions: ldap_set_option LDAP_OPT_DNSDOMAIN_NAME failed: %ld AzpADPersistOpenEx: ldap_get_option for LDAP_OPT_SSL failed AzpADSetLdapEncryptionOption: ldap_set_option LDAP_OPT_ENCRYPT failed: %ld (null)%sAzManSQLProvider::Initialize: NULL pwszConnStr. AzManSQLProvider::Initialize: Not enough memory for db instance. AzManSQLProvider::Initialize(): Database::Open() returned 0x%08X. AzManSQLProvider::Initialize(): Not enough memory for db connection. AzManSQLProvider::Initialize(): SqlConnection::DriverConnect() returned 0x%08X. AzManSQLProvider::Initialize SqlConnection::DriverConnect returns 0x%08X. AzManSQLProvider::Initialize(): FAILED to initialize AES crypto provider Error 0x%08X. AzManSQLProvider::NeedsReconnect(): SqlConnection::NeedsReconnect returned %d. masterFAILED to initialize SHA256 hash algorithm Error 0x%08X. CryptHashData FAILED Error 0x%08X. CryptGetHashParam FAILED Error 0x%08X. AzMultiValuePropertyBuffer::NextPage is out of memory. No object can be found for guid=[%ws] in the visible tree. No object can be found for the given guid. =%d%wsAzMultiSidBuffer::NextPage is out of memory. |UuidCreate failed. AzpeGetProperty failed. AzObjectRecord::Initialize failed. AzObjectRecord::PopulateObject receives NULL objectHandle. Fails to set property (id is %d) to value %wsFails to set property (id is %d) to value %dAzObjectRecord::PopulateObject failed. ContainerRecord::Initialize failed. RoleRecord::Initialize fails to allocate memory for SID. TaskRecord::Initialize fails to allocate memory for Bizrule language TaskRecord::Initialize fails to allocate memory for Bizrule Path GroupRecord::Initialize fails to allocate memory for Bizrule language GroupRecord::Initialize fails to allocate memory for Bizrule Path GroupRecord::Initialize fails to allocate memory for SID. 1!defighSELECT count(*) FROM sysobjects WHERE name = 'AzMan_AzAuthorizationStore' and type = 'U' QueryChildrenUpdateTimeStamps fails for action=%d and objectType=%d. ObjectTimeStamp::GetUpdateInformation failed. QueryObjectUpdateTimeStamp has NULL parameter pRowTimeStamp.AzManSproc::Fetch failed with error: %d. QueryObjectUpdateTimeStamp failed. QueryChildrenUpdateTimeStamps has NULL parameter pTSMap.QueryChildrenUpdateTimeStamps failed to allocate memory. Invalid Stored Procedure Object: no ObjectRecord. QueryChildrenUpdateTimeStamps failed. StoreTimeStamp::GetUpdateInformation failed. SqlStoreHasUpdate has NULL pPersistContext or pbNeedUpdate parameter. AzpeSetObjectOptions failed. Enter PopulateObjectSingleValueProperties. PopulateObjectSingleValueProperties: objectHandle = NULL is invalid. PopulateObjectSingleValueProperties: pSproc = NULL is invalid. AzManSproc is invalid: No AzObjectRecord object. Leave PopulateObjectSingleValueProperties. return value: 0. Leave PopulateObjectSingleValueProperties. return value: %d. Enter PopulateObjectOptionalValueProperties. PopulateObjectOptionalValueProperties: objectHandle = NULL is invalid. PopulateObjectOptionalValueProperties: pSproc = NULL is invalid. Leave PopulateObjectOptionalValueProperties. return value: 0. Leave PopulateObjectOptionalValueProperties. return value: %d. PACL parameter for SqlLoadPolicyUser is NULL. Policy user type is not supported %d. Object of type %d does not support the action %d. AzManSproc::Execute failed. AzManSproc::Execute failed with error: %d. There are too many policy users for an ACL to hold. AddAccessAllowedAceEx fails. Error reading users of type %d SqlGetObjectSecurityDescriptor has NULL PSECURITY_DESCRIPTOR. InitializeSecurityDescriptor failed. SetSecurityDescriptorDacl failed. SqlGetObjectSecurityDescriptor failed. SqlGetObjectSecurityDescriptor failed %d. AzpeSetSecurityDescriptorIntoCache failed %d. SqlLoadAcls failed. GetAclInformation failed. CollectSids: duplicate SID. CollectSids: set::insert failed. AzManSproc::Execute failed AzManSproc::Execute failed with sqlStatus: %d. SqlUpdatePolicyUser failed. SqlUpdatePolicyUsersByAcl failed to allocate memory. SqlUpdatePolicyUsersByAcl failed. AzpeGetSecurityDescriptorFromCache failed. GetSecurityDescriptorDacl failed. SqlUpdatePolicyUsers failed. SqlLoadPolicyStore receives NULL pSqlPersistContext. Error to create a database %ws that already exists. Error setting MajorVersion. Error setting MinorVersion. Error setting default options. Error to open database %ws that does not exist. SqlLoadPolicyStore failed. SqlLoadPolicyStore succeeded. SqlProviderInitialize receives NULL parameters: %d. SqlProviderInitialize receives lower version number in AzrolesInfo: %d. Both OldSqlContext and sqlUrl being NULL is invalid. SQL URL does is not valid: it does not contain a database name information. Out of memory when allocating connection string. Out of memory when allocating PAZP_SQL_CONTEXT. Out of memory when allocating AzmanSQLLayer. AzmanSQLLayer::Initialize failed. SqlLoadPolicyStore SQL provider is invoked without mssql prefix "mssql". ://SQL provider URL is missing %ws. SqlPersistIsUpdateNeeded called with pbIsUpdateNeeded = NULL or pSqlPersistContext = NULL. SqlPersistIsUpdateNeeded failed. SqlPersistUpdateCache has updates. SqlPersistUpdateCache has no updates. SqlPersistUpdateCache failed. SqlPersistUpdateChildrenCache called. SqlPersistUpdateChildrenCache failed. SqlRemoveSqlRoles receives NULL SqlConnection. AzDatabaseSproc::Create fails with SqlStatus=%d. AzDatabaseSproc::Execute (AzMan_SPD_SQLRole_ForObject) fails with SqlStatus=%d. SqlPersistDelete failed. BeginTransaction returns: %d. CommitTransaction returns: %d. RollbackTransaction returns: %d. SqlPersistSubmit receives NULL PersistContext. SqlRemoveSqlRoles failed. SqlSubmitShallowProperties failed. SqlSubmitOptionalProperties failed. SqlSubmitMultiValueProperties failed. SqlUpdateStoreStateInfo failed. SqlPersistSubmit failed. SqlCreateObject receives NULL sqlPersistContext. GetStoreProcedure fails. SqlCreateObject receives NULL sqlPersistContext or NULL ppSproc. Object of type = %d does not support action %d. AzManSproc::Execute partially succeeded. Check Sproc %ws SqlExecuteNonQueryForObject failed with error: %d. SqlExecuteQueryForObject receives NULL sqlPersistContext or NULL ppSproc. PopulateObjectSingleValueProperties failed with error: %d. PopulateObjectOptionalValueProperties failed with error: %d. AzpeClearPropertyItemList failed: propID=%d, ObjectType=%d, ObjectName=%s. AzpeClearPropertyItemList fails for property (id is %d). Fails to set property (id is %d). SqlLoadMultiValues failed.AzpeAddPropertyItemSid: set::insert failed. SqlCreateChildListShallow failed.SqlCreateChildListShallow failed with error: %d. SqlCreateChildFromRecord receives NULL ppObject or NULL pSproc parameter. AzManSproc does not have AzObjectRecord. Fetch fails. AzpeGetObjectByGuid fails. AzpeCreateObject fails. SqlCreateChildFromRecord failed.SqlLoadChild failed.SqlLoadChildren (Loading type: %d.) Failed to allocate memory for object list. SqlLoadChildren (Type being loaded: %d.) SqlLoadSpecificChildObjectShallow failed with error: %d. Child object of type %d starts recursive loading. SqlLoadMultiValues failed with error: %d. SqlLoadObjectOptionalData failed with error: %d. SqlLoadChildren failed with error: %d. SqlLoadChildren failed.SqlLoadChild failed. ObjectTimeStamp allocation failed. AzpeGetObjectByGuid failed. SqlRefreshObjectsByTimeStamp failed. AzMan_SPS_Get_ObjectSecurityOptionAzMan_SPS_Get_AzApplicationAzMan_SPS_Get_AzScopeAzMan_SPS_Get_AzTaskAzMan_SPS_Get_AzOperationAzMan_SPS_Get_AzRoleAssignmentAzMan_SPS_Get_AzApplicationGroupAzMan_SPD_AzApplicationGroupAzMan_SPD_AzApplicationAzMan_SPD_AzScopeAzMan_SPD_AzTaskAzMan_SPD_AzRoleAssignmentAzMan_SPD_User_From_RoleAzMan_SPI_AzApplicationAzMan_SPI_AzTaskAzMan_SPI_AzScopeAzMan_SPI_AzRoleAssignmentAzMan_SPI_AzApplicationGroupAzMan_SPI_Add_User_To_RoleAzMan_SPS_Enum_AzApplicationGroupAzMan_SPS_Enum_AzScopeAzMan_SPS_Enum_AzTaskAzMan_SPS_Enum_AzRoleAssignmentAzMan_SPS_Get_Role_For_ObjectAzMan_SPS_Get_DBOwnersAzMan_SPS_Enum_AzApplicationGroupUpdateTimeStampAzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStampAzMan_SPS_Enum_AzTaskUpdateTimeStampAzMan_SPI_Create_SqlRole_For_ObjectAzManSproc::GetStoreProcedure receives NULL pSproc parameter. AzManSproc::Initialize receives NULL objectHandle. AzObjectRecord::NextPage fails. AzManSproc::AdvanceDataBuffer called without AzObjectRecord member. AdvanceDataBuffer fails. AzManSproc::BindParameters for action=%d and childType=%d. Stored Procedure %ws does not support parameter of ID=0x%x. Stored Procedure %ws does not support result parameter of ID=0x%x. Negative SQL return code 0x%x is interpreted made positive. AzMan_SPS_Get_AzAuthorizationStoreByNameAzMan_SPS_Get_StoreIDByNameAzMan_SPS_Enum_AzApplicationsAzMan_SPI_AzAuthorizationStoreAzMan_SPU_AzAuthorizationStoreAzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStampAzMan_SPS_Enum_AzApplicationUpdateTimeStampAzMan_SPD_AzAuthorizationStoreAzMan_SPS_Enum_AzOperationAzMan_SPI_AzOperationAzMan_SPU_AzApplicationAzMan_SPD_AzOperationAzMan_SPS_Enum_AzScopeUpdateTimeStampAzMan_SPS_Enum_AzOperationUpdateTimeStampAzMan_SPU_AzScopeAzMan_SPU_AzRoleAssignmentAzMan_SPI_AzRoleAssignment_Multi_AppMembersAzMan_SPI_AzRoleAssignment_Multi_SidMembersAzMan_SPI_AzRoleAssignment_Multi_OperationsAzMan_SPI_AzRoleAssignment_Multi_TasksAzMan_SPS_Enum_AzRoleAssignment_AppMembersAzMan_SPS_Enum_AzRoleAssignment_SIDMembersAzMan_SPS_Enum_AzRoleAssignment_OperationsAzMan_SPS_Enum_AzRoleAssignment_TasksAzMan_SPS_Get_AzApplicationGroup_LDAPQueryAzMan_SPU_AzApplicationGroupAzMan_SPI_AzApplicationGroup_Multi_AppMembersAzMan_SPI_AzApplicationGroup_Multi_AppNonMembersAzMan_SPI_AzApplicationGroup_Multi_SidMembersAzMan_SPI_AzApplicationGroup_Multi_SidNonMembersAzMan_SPIU_AzApplicationGroup_LDAPQueryAzMan_SPS_Get_AzApplicationGroup_BizruleInfoAzMan_SPIU_AzApplicationGroup_BizruleAzMan_SPS_Enum_AzApplicationGroup_AppMembersAzMan_SPS_Enum_AzApplicationGroup_AppNonMembersAzMan_SPS_Enum_AzApplicationGroup_SIDMembersAzMan_SPS_Enum_AzApplicationGroup_SIDNonMembersAzMan_SPU_AzTaskAzMan_SPS_Enum_AzTask_OperationsAzMan_SPS_Enum_AzTask_TasksAzMan_SPI_AzTask_Multi_OperationsAzMan_SPI_AzTask_Multi_TasksAzMan_SPS_Get_AzTask_BizruleInfoAzMan_SPIU_AzTask_BizruleAzMan_SPU_AzOperationAzMan_SPD_SQLRole_ForObjectAzMan_SP_Grant_PermissionAzDatabaseSproc::PrepareParameters failed. AzDatabaseSproc::Create failed. =L9o<{Oyz3)6{O>`3)6{O>`s.O -.0/0123456789ABCDEF" "t X"" x"(88" " `P"D` "  " P"@@"x " "0("t "((" " 8("("   " x  "    " `  " 0  "   "x   " 0  "   "( P  "   "H p  "  "4` "| "(00" "Hp "4l`"`8" "@ "Hh " "0 "8X " "  "h "  " "@ " "8` " "X " "` "` "`X "`( "` "` "` "`h "@"pxP" "HP "8"8x0"8@0""d "" "4PH"P"@@"h@"8@"@"@"@"`8"(@"0"0"x0"@0"0"@"\P"\hP"(@"@"@"@P@"8" "h@" 8"H"x0"@0"0"0"0"@0"0" P"\pP"@"@"@"@"P@" P"`h8" (P"8"8`"@"@"   " "Px "0 "d 0" " "8` "(0"X "|0" 80"@h "0"8! "    "(` 0" "  " "4X0"8x("t "0"HX0" "  "4@`" X " "t " " "  """ "`)) "(0)0"( "\'' ")* ".."d-p-p",- "<+H+0"4(4 "3 "22 "@3h38"<< "<< "@: 0< "p; ; ";0; ":: "@: `: "99 "99 "9 9 "88 " 8`8@"h7p7 "EF "hEE "D E"DDh"CD@DH"XC`C "BC0"8BHB"A`A`"`@@8"?? "?0? ">> " >H>p"==0" =8= "PFXF U[$88U[ \\RSDSN(mDG=B>  2P`"R p ` 08 @8>B??  2P8$bp`0@ 8 @o@@   2P"R p ` 0@+80AAA+  2P$bp`0@L8xBBCL  2P"r p ` 0m@y8CCDCDHDy  2P$bp`0p@8D#E5E\EdE  2Pp  4 2pd 4  p d T 4 Rpd 42 p##4 Rp`H@8$\`\r\  2PH42 p! p ` ,@Xh]]]*^2^^L_  rP 7 &dY"4XRpPt!-9E_``aavaaaa d T 4 Rp2 !dQ!4P!H p P0 Lp`P0P/ UtTdSPPp t dT42td42d 4R p, 4`Z p`P  R0жWxttt4 Rpiyu v,v@vEvNv bvvv2P&p`0,@@8@8v@w^wwwwxCyLy  2Pd T 4RpXpyyy3 %4 p`Pt0'3{m|}}d~ t dT424 4 p`0t!El@QH@xHC<ڂ,Z}1Q  RP%4 p (4VPp`Pp  4 Rp t d T 423_p`0Pt"ʋ8/ 4  p`P@ -4p`t@H,ix ]Д  RP2 $t9$d8$47$0Pp- Etd4C PP- Etd4C PPT4 r p `d T4' 't#d4r P(\e! !dT4 ! !t d T 4 rͬ! !tdT4 ̭, tdT4' 't'd'4'Pd 4  p 4 p `|ĺ 4 p `"Lo dT4p t d T 4 rd T 4 r dT 4 rpd T 4Rp9 5+t$d43 Pp< +t['dZ#4YTPtP&6FV"&Cb  4 pd T42pd 4R p4pxh0Vd 4 R p4p*4pL4p` 4p8p4p0V4pLt d 4 r! !tdT4 z@! !tdT4 Ujd T 4 rpd4pPpnd4pPH ~    4 pd4 pd4pP    d4pP N  d4pP@hd4pP\d4pPldT 4 pX tdT4T4 p `T 4 rp`04 p`Pd4p1!!4 p `P N !T 4 rp`+?,,4 p`P4 p`P" "d4pPP///=0H0W004 p `Pd4phH22%3dT4p4p@p>>>4p@@f@AdT4 p@A~AAdT4 pBBB4p@DfDDd4pPxpHHId4pPPIFJJd4pP( KKHLd4pP`MM) )h%t!d4 (l 8dYѪ -7  2P(* *d&4 pPK$Qc@Nt T4r p`]R p`0o{8د7Ѱ   2P  4R p8,v,  2P T4 p`ZflxdT4p` R0$:j R08ظ( (h$d 4 pAQ]iu8XϹ6:x !u  2PT4 rp`<$ $d T4 R pj+ d4 R p8\ſ  2PR p0p85v  2Pp# #t##d"#4!#P-4p`tHKl!!t d 4 r   @08 %0=  2P 04 p `Pt(L 4$ p`PT4 p `T4 p `'  p`0P%  p`0P dT4p# 543 p`PH 4 rp0  p`0P  p`0P 4 p`P 4 p ` Pp`P0 dT4 pV*?  td4$$4p`P  p`0P'  p`0P* 4+  p`P- e p`0P 4 p ` P ` P0<U+tB$dA4@S: P( (4(p`P- -h&p`0P9E+t$d4C P<E+t6$d544C. P`" "4"p`P9e+t$$d#4"c P% %4%p`P  t d 4R 4 p ` P  4 2p`P) %t d 4 # RP(R0  bZs[s[dT 4 p d4 rp](^(^ d T 4 2p! !4!p`P  td>eJemf  t d r&g1gh  d 4 rhisi3j d 4 Rpjjk" "t"d"4"PT 42 p `#d T 4 rp8 tdT 4 r dT4rpd T 4RpS T4r p `4 r p`p'~8D T~  2P 4p ` PT4 r p `4 rp`P4 R p ` P B̐Րd 4RpT 4 R p `<U.!'t d4S P t d 42P4 p`P p`0P*p`0tRvT 4 R p `-4p`thStd 4 Rp@t)@8@t  2P@* *h !4!p ` P b*@8 -O  2P tdT 4 r, dW4VN pdbEaB . dQ4PJ p P@4#tR#4P#NP`  4 2pd4 pH4 p`P Dh32 !dh!4g!` p P+ dT4ph( 4 p`Pp&  `0Pr p`0P d4 p P  t d 4 rP4 p`P`* 4 p`P d4P  4 p`P  4 2`d T 4 rp0 %4T#J p`P@t4 PX2>J(Hq4 ` p`0Pt0\L0 E4YCP p`Ppd 4 r p 4R p`P td4P d4 p P td 4 rP td4rP'  p`0P d T 4 Rp 4 p ` P3 %4' p`Ptnz@w   :  4 p ` Pd 4 r p! !4! p ` P d4 p P! !4!p`P p`0P 4p ` PdT4p! !4!p`P d T 4 p 4 p ` P td4P; ;h!4!p`P# #t#d#4#P' ) p`0P0"  p`0P8 td4T4 p `- Y p`0Pd T 4Rpd T42p# p`0P% %4%p`P""p`0P% %4%p`PT 4 R p ` 4 rp`P8 dT4rp% 4 p`Ph dT4pdT4p%  p`0P!p`0Pd 4 r pt d4T4 p `  4 Rp h4 p`Pr0d4 p28܌l  2P4 R pPd4 p T380j9  2P r p`P00*4 ptxd 4 Rp4@8ԕ,  2P d4 p P- 5td43r P8 td4P dT4 Rp<5+tW$dV4U3N P`T4 r p `d T 4Rpt d 4RT4r p `T4 r p `rp`001 #t#d#4#P<E+t3$d241C* P@d 4R p4 Rp`P dT4p 42 p ` PT 4 2 pd 42 p d4 rpss d 4 Rp bT`` d T 4 2p42 p  p`0Pd 4 r p82 !d<!4:!4 p P*)p00 p ` 0 R0( t d42 dT 4 Rp d T 4 2pT 4 Rp` 4R p`P dT4 p ,Kj%@Wu (Fv R0  L  R08h"  p`0PP t d T 4 R R0h4 Rp`/BUh'''''''' d T 4 Rp8g(()/))) *&**4 RpH/m////T 4 Rp`!@ 0[222,3d 4 Rpeq;;<<<<<<<<< d T 4 Rp=[@@@6AWAAA(B d T 4 Rp R0p K,K6K4 RpHM'M1M4 Rp )NN9OkOOO P&&d "4 r=?HDQmQQ?  RP  p`0P`.  p`0tX4>`X@UVX`m  rPXd 4 Rp0X YY&Y0Y$ $d T 4 R p  ZQZZZZZZZ!!t d 4 R 6BRb [N[j[t[~[[t d 4R T4 R p ` td4PT 4 r p `/ d4 ptct@xHtf ggx  RP" "t"d"4"P+ p`0t{,A@AHHlk9lllllm m%mm=n?nWnYnn  RP+ +t 'd#4 Ph(4 o~oorrrT4 r p `!4 p`PP 4Rp ` P+ +t'd#4 P@FR^nz~$ 0t` dT4rp 4rp ` P 4p`Pd42p.  p`0t$DH'  RP&p`P0'p`0Pt@bn~mȟ4lp bx|E@8l  2Pxd 4 RpPE@8  2PP R0& d T 4 2p5 %'t d4# P% #RP 20"ts$"tsL t T 4241*p` #=l=]wwh  *DDq 4 rp`@bp`03] b(tpH@8  2P(t  20d 4 Rph 000  4 2p  4 2PxII@43J@KhK2@JȨ@5@KhK2J7JhKL7K@:@J@KhK2Ku MP u! NhQ0u MxQ@u! NQPu! NQ`u p pMQpu( MQu0( (MRNOOP.PO POpPBPZPOOtO^OLO:OOO EXuao.I $)O*ONNetApiBufferFreeDsRoleGetPrimaryDomainInformationDsRoleFreeMemoryNetDfsGetClientInfoDsGetDcNameWGetUserNameExWTranslateNameWLsaConnectUntrustedLsaLookupAuthenticationPackageLsaLogonUserLsaFreeReturnBufferLsaDeregisterLogonProcessWNetGetConnectionWwnsprintfWPathIsUNCWPathIsRootWPathRemoveFileSpecWPathAddBackslashWPathRemoveBackslashWPathCreateFromUrlWUrlUnescapeW-F[0T,,xR(SS  `^`_@*P=`^л0W p@Њ`@yzpzy^ ` ^@:`:;<mNm`mrmmpppxp`pJp4pppooooooloTo8ooonnnnnznfnRn@n.nnnmmmmmlpq*qNqlqqqqqq~r^rpCharUpperWUnregisterClassAUSER32.dllCreateFileW_GetLastErrorCloseHandleMultiByteToWideCharFindResourceWwSizeofResourceLoadResourceLockResourceFreeLibraryGetProcAddressLoadLibraryExWvGetModuleHandleW0lstrcmpiWLeaveCriticalSectionWRaiseException1EnterCriticalSectionFindResourceExWrGetModuleFileNameW\InitializeCriticalSection DeleteCriticalSectionDisableThreadLibraryCallsWideCharToMultiByteLocalAllocLocalFree9GetEnvironmentVariableWCreateDirectoryWGetCurrentProcessId WriteFile`GetLocalTimeGetVersionExWCreateTimerQueueDeleteTimerQueueExCreateTimerQueueTimerDeleteTimerQueueTimerGetCurrentThreadGetCurrentProcessGetComputerNameWGetSystemTimeAsFileTimeEGetFileAttributesWGetVolumeInformationWBGetFileAttributesExWCompareFileTimeDeleteFileWYGetFullPathNameWLoadLibraryW.SetLastErrorCompareStringWFormatMessageWxSleepUnhandledExceptionFilteriSetUnhandledExceptionFilterTerminateProcess OutputDebugStringAAQueryPerformanceCounterGetCurrentThreadIdGetTickCountKERNEL32.dllCoTaskMemFreeCoTaskMemReallocCoTaskMemAlloc+CoCreateInstance StringFromGUID2CLSIDFromStringaCoInitializeExCoUninitializeCLSIDFromProgID StringFromCLSIDole32.dllOLEAUT32.dllLsaOpenPolicyLsaNtStatusToWinErrorLsaQueryInformationPolicyLsaFreeMemoryLsaCloseCreateWellKnownSidXRegCloseKeyRegQueryInfoKeyWwRegEnumKeyExWRegOpenKeyExWRegSetValueExWaRegCreateKeyExWpRegDeleteValueWLookupAccountNameWLookupAccountSidW{ConvertSidToStringSidWConvertStringSidToSidWRegQueryValueExWJGetLengthSidoGetTokenInformationOpenThreadTokenSetThreadTokenEqualDomainSidOpenProcessTokenDuplicateTokenExCopySidInitializeAclAddAccessAllowedAceInitializeSecurityDescriptorSetSecurityDescriptorDaclSetSecurityDescriptorOwnerVGetNamedSecurityInfoWaGetSecurityDescriptorSacl\GetSecurityDescriptorDaclSetNamedSecurityInfoW^GetSecurityDescriptorLength7GetAclInformation6GetAceIsValidSidAddAccessAllowedAceExAddAccessAllowedObjectAceAddAuditAccessAceExSetSecurityDescriptorSaclAdjustTokenPrivilegesMakeSelfRelativeSDCryptReleaseContextCryptAcquireContextWCryptCreateHashCryptHashDataCryptGetHashParamCryptDestroyHashADVAPI32.dll'AuthziFreeAuditEventType,AuthziInitializeAuditEventType%AuthziAllocateAuditParams/AuthziInitializeAuditParamsWithRM+AuthziInitializeAuditEvent2AuthziLogAuditEventAuthzFreeAuditEvent(AuthziFreeAuditParamsAuthzInitializeResourceManager AuthzFreeResourceManagerAuthzFreeContext AuthzGetInformationFromContextAuthzAddSidsToContextAuthzInitializeContextFromTokenAuthzInitializeContextFromSidAuthzAccessCheckAUTHZ.dllUuidFromStringW#UuidToStringWRpcStringFreeWUuidCreate"UuidToStringARpcStringFreeARPCRT4.dllDsQuoteRdnValueWDSPARSE.dllDsCrackNamesW$DsFreeNameResultWDsBindWtDsUnBindWNTDSAPI.dllODBC32.dllVirtualProtectVirtualAllocGetSystemInfoXSetThreadStackGuaranteeVirtualQueryRtlAllocateHeapRtlImageNtHeaderBRtlDeleteCriticalSectionyRtlEnterCriticalSectionRtlConvertExclusiveToShared(RtlInitializeCriticalSectiontRtlLeaveCriticalSectionRtlConvertSharedToExclusiveResolveDelayLoadedAPI DelayLoadFailureHook!PerfCreateInstance5PerfSetCounterRefValue6PerfSetCounterSetInfo9PerfStartProvider;PerfStopProvidermemcmpmemcpywcscmp HPJ HIIJ8J HPJ HPJ HPJGII HPJ HPJHIIPu؂n=p=77oȂn=P=77on==77o>@@ `hPP 0wPw>hPPp{@pP@а``и`   p~~0wPw08ȃ؃X(8HXhxhxHȄ؄defghAX?0@QP H@Q@X@?`Q0h@@AAx@@8?H@?h@8?>AA@A`AA0A@A.A-0A,x@/@0@1@8?@8?0@H@?X@h@ ?!@(?8???d>e>f?(?8?gX?hx?OPP`N0PNO0NXONN0N`NNЬȬجM8M`MxMИM MMpM LLLLJK8KL@LxL-J.K08K,xK/K1KJ hJ!JHHdHfHe IgPIhxI0H@H@XH-.01LPح؝̳ ̳`@̳8p̳̳P̳(8xП0h   H  Ȳ`x(PȮxhТdhXHpXHУXH (г  tP ` `8P`8̳H0 pPh`8`H̳`X̳P( x0P̳(̳H@H80p(0̳@@̳8`د زhXX̳p̳ p  .?AVCAtlException@ATL@@.?AVlength_error@std@@.?AVout_of_range@std@@.?AVlogic_error@std@@.?AVbad_alloc@std@@.?AVexception@@] f2-+xȯ: !HH8P@@@00(0(0(HXwGg   k -.0)()+*+   /,1 !1 !defghi           .0- 1defghi !.0-1 !defghif2H{I4f2H{I4L)EgddL)EgT TT`tbht7! @!!<"?"tP""<"v#L|# $\$%t%S'\'**Z+``+9,t@,@-<P-../t/d/tl/001122822244446T66t6*7007787~8H88098:\`:p;;v<t<I=t=>l>@ @'Ah0AoBxBCXCDDEpF{FtGGGY$PYYYZ4Z[T[\P$\\`\F]h]__b0bbbcT0cMcTTczd(di@ilkdtkfmlmmmn ooootPpp qst/tt8tqtxttttTtu<uutuv0vvvvvjypyyzzT(zSz\zzzTz{{~~`ۄxTą%,cl$0, T̗ "t(pHx1p8âU\ŭ@̭qx]  ٽ,X\Xdprx_h ptztttpp Np`pp p Np`pp p Np`pp'x0wx;Pcpx<xPxx\xpxx0|xp`o<r`=tP&t0 ipxBP0x^<px<xPxx=pP~pIPt ` Vp`ppp Vp`ppp Vp`ppp t0fpppp@0P08@X`E0P00e0p0%0000d8pAPx$h0expQ`%x0 xdpAPx/(@< x<0U0`0  )  0  X  d  t +@md X@XP03@BHtpp Wp`ppp Wp`pp0x@x<8 L -!4!!t!"""p#7#p@#w#p##p##p$7$p@$w$p$$p$$p%7%p@%w%p%%p%%p&6&p@&&&l'''x'5(x@((x((x)7)p@))x))x*b*p***+<+--%.0.C/ P/)1 01@2H2D3L3344t4|555p56p6G6pP66p66p67p7G7pP77x78 88890999\:p::;e;xp;;x;%<x0<<x<<x<E=xP==x=>x>`>xp>>?e?p???9@x@@,A@A}B@BCC9Dx@DDD5E@EEE FxFF<GGGpPGGpGeHdpHII K  KuLXLUMd`MiNpNyOO PX(P9Q8@QQtQRRRpS6Sp@SwSpSSpSLT`TTUUU,V@VVVlWWWpWWpX7Xp@XwXpXXpXXpY4Yp@YtYpYYpYYpZUZx`ZZxZ[x [[[%\x0\\x\\x\E]xP]]x]^x^e^xp^^x^_p_`_xp__x_2`@```a<ab@bc8cdtddepeepeepe'fp0fgfppffpffpf|ggh0hhh\ipiijejxpjjxj%kx0kkxk~ll.m@mmxmmxnUnx`nnxnnpoPox`ooxo"p0ppplq qLrP`r(t0tAuPu=v<DvUw8\w||~~,@8xXX`КkǜpМpGpP p7p@wpОxp Wp`=P`,pM`pעphХݦ`ɨt(0S\,LtЮخ5<,.4tD0|0еPжP?H<;tPȹLйHPȺкHPȻлH@PȼpмHPtt vt־t6t@ttqtJ<P@  Y`p@PHntp $J0Pv|J@P0 cHl8`phphphphphphphphphphphphphphphphp h p   h p   h p   h p   h p  hphphphphphPv`pt?H6@ 0t0 p   t!!!" "##A$tP$2%8%&& 0&' ''t'((v) )`*p**t*++, ,--1.t@."/(/0`  0111t1r222t2+3433 33 3T4 \4S5`\5556H 06b6 h67`7C7x p77t77 778*9 09@:H::<:::O;` `;; ;< <<0<K= T==t=>  >p>t>/?@??t?@<@A`AAtA@BHBjFpFJ(JKTKLL PLP>Q<PQtSS8Tt@TWtWWW!Z(ZZ`Z[[*]0]^ ^^t^^p^T_t`_```T`aabhbfclc&e,eBfHfXg`gSj\jj<jkkll m mqqJrPruHumutuu@uuvYw `ww0x{<|}< }}t}` L `| ւpp"(,40b8h;<DJP7@ ט|~flɜ0М| (vt|ǟП<tP$`0^pԡtT(0OT`|Tt DPPlTT dب^dүxد%,KT(`$"0~0`c<pTѸTظPX 8Sp\p ` <,T4< x t/t8rx x<!:PttXP!`l!!>|P` ! b!p&,!*!0"E$"L)<"0T"Op"X""N"T# #  0# P#t#L#T#8@*#*/#/73$@36$6<=D$P== =U?l$\?6G$/w`>/P < -4/<zL/m!d/t!##%x/%K'/T')/)+/+./.E0/L0n4 0t46(06;D0 ;=(=?d0?@0@BBC0C$M0,M5N0Q<2DQ?Rp=PRdS=lS9U@UX=XJY>PYY( ZZ> [[p?[\?\~^?^<_<D_ ``bbVe @\elf(@tfh<@hj@ jfk1lko@ orBrvs<|s't`0t vpB(vwBwx<xyByzB{f{Tl{}7~~~T%B0<x @CS\܃txCȇgpp(%=`D$p(C0uC| CC&DdDlXEEߣt=@FX9DtLEPtptt0it Yt9tt YtxpF<LFFF1<ppYDpDEFLGT%0G0m<tHGGg$HpGLH@tPpaHh_HhHT8H$I Tk8It@IdIptIp|IIGIpIIpIId@BpI`IX %+FHLgy`Qlpxp,KKj04:U[v|`@7`Ytp+ Mh0Xz  .4O Up v p  P  /P P X55PVv8 (.N Ttz EpAu(p 00P!Vx~')@* 33P4 ,,KKjjg!@@_?Z=`x>x@B"BD@@bE0Fllhh:@H0`T<tPP00pP0PpP000pPPP84`x$fghe(u@Xp        g z  c 5 /e =h @2 REGISTRYFILETYPELIBMUI4VS_VERSION_INFO 98 98?StringFileInfo040904B0LCompanyNameMicrosoft CorporationFFileDescriptionazroles Modulex,FileVersion10.0.14393.2515 (rs1_release_1.180830-1044)0InternalNameazroles.LegalCopyright Microsoft Corporation. All rights reserved.8OriginalFilenameazrolesj%ProductNameMicrosoft Windows Operating SystemDProductVersion10.0.14393.2515DVarFileInfo$Translation HKCR { AzRoles.AzAuthorizationStore.1 = s 'AzAuthorizationStore Class' { CLSID = s '{b2bcff59-a757-4b0b-a1bc-ea69981da69e}' } AzRoles.AzAuthorizationStore = s 'AzAuthorizationStore Class' { CurVer = s 'AzRoles.AzAuthorizationStore.1' } NoRemove CLSID { ForceRemove {b2bcff59-a757-4b0b-a1bc-ea69981da69e} = s 'AzAuthorizationStore Class' { ProgID = s 'AzRoles.AzAuthorizationStore.1' VersionIndependentProgID = s 'AzRoles.AzAuthorizationStore' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } AzRoles.AzPrincipalLocator.1 = s 'AzPrincipalLocator Class' { CLSID = s '{483afb5d-70df-4e16-abdc-a1de4d015a3e}' } AzRoles.AzPrincipalLocator = s 'AzPrincipalLocator Class' { CurVer = s 'AzRoles.AzPrincipalLocator.1' } NoRemove CLSID { ForceRemove {483afb5d-70df-4e16-abdc-a1de4d015a3e} = s 'AzPrincipalLocator Class' { ProgID = s 'AzRoles.AzPrincipalLocator.1' VersionIndependentProgID = s 'AzRoles.AzPrincipalLocator' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } NoRemove Interface { ForceRemove {edbd9ca9-9b82-4f6a-9e8b-98301e450f14} = s 'IAzAuthorizationStore interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {b11e5584-d577-4273-b6c5-0973e0f8e80d} = s 'IAzAuthorizationStore2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {abc08425-0c86-4fa0-9be3-7189956c926e} = s 'IAzAuthorizationStore3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {987bc7c7-b813-4d27-bede-6ba5ae867e95} = s 'IAzApplication interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {086a68af-a249-437c-b18d-d4d86d6a9660} = s 'IAzApplication2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {181c845e-7196-4a7d-ac2e-020c0bb7a303} = s 'IAzApplication3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {929b11a9-95c5-4a84-a29a-20ad42c2f16c} = s 'IAzApplications interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {5e56b24f-ea01-4d61-be44-c49b5e4eaf74} = s 'IAzOperation interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {1f5ea01f-44a2-4184-9c48-a75b4dcc8ccc} = s 'IAzOperation2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {90ef9c07-9706-49d9-af80-0438a5f3ec35} = s 'IAzOperations interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {cb94e592-2e0e-4a6c-a336-b89a6dc1e388} = s 'IAzTask interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {03a9a5ee-48c8-4832-9025-aad503c46526} = s 'IAzTask2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {b338ccab-4c85-4388-8c0a-c58592bad398} = s 'IAzTasks interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {00e52487-e08d-4514-b62e-877d5645f5ab} = s 'IAzScope interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {ee9fe8c9-c9f3-40e2-aa12-d1d8599727fd} = s 'IAzScope2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {78e14853-9f5e-406d-9b91-6bdba6973510} = s 'IAzScopes interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {f1b744cd-58a6-4e06-9fbf-36f6d779e21e} = s 'IAzApplicationGroup interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {3f0613fc-b71a-464e-a11d-5b881a56cefa} = s 'IAzApplicationGroup2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {4ce66ad5-9f3c-469d-a911-b99887a7e685} = s 'IAzApplicationGroups interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {859e0d8d-62d7-41d8-a034-c0cd5d43fdfa} = s 'IAzRole interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {95e0f119-13b4-4dae-b65f-2f7d60d822e4} = s 'IAzRoles interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {eff1f00b-488a-466d-afd9-a401c5f9eef5} = s 'IAzClientContext interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {2b0c92b8-208a-488a-8f81-e4edb22111cd} = s 'IAzClientContext2 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {11894fde-1deb-4b4b-8907-6d1cda1f5d4f} = s 'IAzClientContext3 interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e192f17d-d59f-455e-a152-940316cd77b2} = s 'IAzBizRuleContext interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {fc17685f-e25d-4dcd-bae1-276ec9533cb5} = s 'IAzBizRuleParameters interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e94128c7-e9da-44cc-b0bd-53036f3aab3d} = s 'IAzBizRuleInterfaces interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {d97fcea1-2599-44f1-9fc3-58e9fbe09466} = s 'IAzRoleDefinition interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {881f25a5-d755-4550-957a-d503a3b34001} = s 'IAzRoleDefinitions interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {55647d31-0d5a-4fa3-b4ac-2b5f9ad5ab76} = s 'IAzRoleAssignment interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {9c80b900-fceb-4d73-a0f4-c83b0bbf2481} = s 'IAzRoleAssignments interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {e5c3507d-ad6a-4992-9c7f-74ab480b44cc} = s 'IAzPrincipalLocator interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {504d0f15-73e2-43df-a870-a64f40714f53} = s 'IAzNameResolver interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } ForceRemove {63130a48-699a-42d8-bf01-c62ac3fb79f9} = s 'IAzObjectPicker interface' { ProxyStubClsid = s '{00020424-0000-0000-C000-000000000046}' ProxyStubClsid32 = s '{00020424-0000-0000-C000-000000000046}' TypeLib = s '{11A8B8EE-BF30-409A-8EF7-3A143EF70332}' { val Version = s '1.0' } } } } HKCR { AzRoles.AzBizRuleContext.1 = s 'AzBizRuleContext Class' { CLSID = s '{5c2dc96f-8d51-434b-b33c-379bccae77c3}' } AzRoles.AzBizRuleContext = s 'AzBizRuleContext Class' { CurVer = s 'AzRoles.AzBizRuleContext.1' } NoRemove CLSID { ForceRemove {5c2dc96f-8d51-434b-b33c-379bccae77c3} = s 'AzBizRuleContext Class' { ProgID = s 'AzRoles.AzBizRuleContext.1' VersionIndependentProgID = s 'AzRoles.AzBizRuleContext' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' } } } } CREATE TABLE [dbo].[AzMan_AzApplicationGroup] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [StoreID] [int] , [AppID] [int] , [ScopeID] [int] , [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [GroupType] [tinyint] NULL, [LdapQueryID] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzAuthorizationStore] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [Description] [nvarchar] (1024) , [Name] [nvarchar] (512) , [ApplicationData] [ntext] , [DomainTimeout] [int] NULL , [ScriptEngineTimeout] [int] NULL , [MaxScriptEngines] [int] NULL , [TargetMachine] [nvarchar] (50) , [ApplyStoreSacl] [bit] NULL , [GenerateAudits] [bit] NULL , [MajorVersion] [int] NULL, [MinorVersion] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzApplication] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [StoreID] [int] NOT NULL , [Name] [nvarchar] (512) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ApplyStoreSacl] [bit] NULL , [GenerateAudits] [bit] NULL , [AuthzInterfaceClsId] [int] NULL , [ApplicationVersion] [nvarchar] (50), [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule_To_Task] ( [BizRuleID] [int] NOT NULL , [TaskID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule_To_Group] ( [BizRuleID] [int] NOT NULL , [GroupID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_BizRule] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ParentId] [int] NOT NULL , [ParentType] [tinyint] not NULL, [BizRuleImportedPath] [nvarchar] (512) , [BizRule] [ntext] , [BizRuleLanguage] [nvarchar] (64), [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_LDAPQuery] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [GroupID] [int] NOT NULL , [LdapQuery] [ntext] , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Group_SIDMember] ( [GroupID] [int] NOT NULL , [MemberSID] [varbinary] (85) NOT NULL , [Member] [bit] Not NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Group_AppMember] ( [GroupID] [int] NOT NULL , [ChildID] [int] NOT NULL , [Member] [bit] Not NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzOperation] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [AppID] [int] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [OperationID] [int] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzTask] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [ObjectGuid] [uniqueidentifier] NULL, [AppID] [int], [ScopeID] [int], [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [IsRoleDefinition] [bit] NULL , [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzScope] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [AppID] [int] NOT NULL , [Name] [ntext], [NameLen] [int] NOT NULL, [NameHash] [Binary] (32) NULL, [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ObjectGuid] [uniqueidentifier] NULL, [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL, [HasSpecificUsers] [bit] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_AzRoleAssignment] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [AppID] [int], [ScopeID] [int], [ParentType] [tinyint] NOT NULL , [Name] [nvarchar] (64) , [Description] [nvarchar] (1024) , [ApplicationData] [ntext] , [ObjectGuid] [uniqueidentifier] NULL , [RowUpdateTimeStamp] [timestamp] NULL , [ChildUpdateTimeStamp] [binary] (8) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_SIDMember] ( [RoleID] [int] NOT NULL , [MemberSID] [varbinary] (85) NOT NULL, [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_AppMember] ( [RoleID] [int] NOT NULL , [ChildID] [int] NOT NULL , [RowUpdateTimeStamp] [timestamp] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_To_Task_Link] ( [TaskID] [int] NOT NULL , [RoleID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Role_To_Operation_Link] ( [OperationID] [int] NOT NULL , [RoleID] [int] NOT NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Task_To_Task_Link] ( [TaskID] [int] NOT NULL , [ChildID] [int] NOT NULL ) ON [PRIMARY] GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Azman_SQLRole]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[Azman_SQLRole] GO CREATE TABLE [dbo].[Azman_SQLRole] ( [uid] [int] not null, [ObjectID] [int] NULL , [ObjectType] [tinyint] NULL , [SQLRoleName] [nvarchar] (64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [RoleType] [tinyint] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[AzMan_Task_To_Operation_Link] ( [OperationID] [int] NOT NULL , [TaskID] [int] NOT NULL ) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplication_StoreID] ON [dbo].[AzMan_AzApplication]([StoreID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_AppID] ON [dbo].[AzMan_AzApplicationGroup]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_ScopeID] ON [dbo].[AzMan_AzApplicationGroup]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzApplicationGroup_Name] ON [dbo].[AzMan_AzApplicationGroup]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzOperation_Name] ON [dbo].[AzMan_AzOperation]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzOperation_AppID] ON [dbo].[AzMan_AzOperation]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_AppID] ON [dbo].[AzMan_AzRoleAssignment]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_ScopeID] ON [dbo].[AzMan_AzRoleAssignment]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzRoleAssignment_Name] ON [dbo].[AzMan_AzRoleAssignment]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzScope_AppID] ON [dbo].[AzMan_AzScope]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_Azman_Scope_Name] ON [dbo].[AzMan_AzScope] ([AppID], [NameHash]) ON [PRIMARY] Go CREATE INDEX [IX_AzMan_AzTask_AppID] ON [dbo].[AzMan_AzTask]([AppID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzTask_ScopeID] ON [dbo].[AzMan_AzTask]([ScopeID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_AzTask_Name] ON [dbo].[AzMan_AzTask]([Name]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_BizRule_Parent] ON [dbo].[AzMan_BizRule]([ParentId], [ParentType]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_Group_AppMember_GroupID] ON [dbo].[AzMan_Group_AppMember]([GroupID]) ON [PRIMARY] GO CREATE INDEX [IX_AzMan_LDAPQuery_GroupID] ON [dbo].[AzMan_LDAPQuery]([GroupID]) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplication] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzApplication] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzAuthorizationStore] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzAuthorizationStore] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzScope] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzScope] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzApplicationGroup] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore] FOREIGN KEY ( [StoreID] ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] ( [ID] ) , CONSTRAINT [FK_AzMan_AzAppGroup_AzMan_AzScope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO ALTER TABLE [dbo].[AzMan_AzApplicationGroup] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzApplicationGroup] CHECK (sign(coalesce([StoreID],0)) + sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzRoleAssignment] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD CONSTRAINT [CK_AzMan_AzTask] CHECK (sign(coalesce([AppID],0)) + sign(coalesce([ScopeID],0)) = 1) GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzApplication] GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzAuthorizationStore] GO alter table [dbo].[AzMan_AzApplicationGroup] nocheck constraint [FK_AzMan_AzAppGroup_AzMan_AzScope] GO ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzOperation] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzRoleAssignment] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzRoleAssignment] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_Role_To_App] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_Role_To_Scope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint [FK_AzMan_Role_To_App] GO alter table [dbo].[AzMan_AzRoleAssignment] nocheck constraint FK_AzMan_Role_To_Scope GO ALTER TABLE [dbo].[AzMan_AzTask] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_AzTask] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] , CONSTRAINT [FK_AzMan_AzTask_To_App] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) , CONSTRAINT [FK_AzMan_AzTask_To_Scope] FOREIGN KEY ( [ScopeID] ) REFERENCES [dbo].[AzMan_AzScope] ( [ID] ) GO alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_App] GO alter table [dbo].[AzMan_AzTask] nocheck constraint [FK_AzMan_AzTask_To_Scope] GO ALTER TABLE [dbo].[AzMan_BizRule] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_BizRule] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_LDAPQuery] WITH NOCHECK ADD CONSTRAINT [PK_AzMan_LDAPQuery] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzOperation] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_AzOperation_OpID] UNIQUE NONCLUSTERED ( [OperationID], [AppID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_AppMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Group_AppMember_member] UNIQUE NONCLUSTERED ( [GroupID], [ChildID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_SIDMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Group_SIDMember_member] UNIQUE NONCLUSTERED ( [GroupID], [MemberSID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_AppMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Role_AppMember_member] UNIQUE NONCLUSTERED ( [RoleID], [ChildID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_SIDMember] WITH NOCHECK ADD CONSTRAINT [IX_AzMan_Role_SIDMember_member] UNIQUE NONCLUSTERED ( [RoleID], [MemberSID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_AzApplication] ADD CONSTRAINT [FK_AzMan_AzApplication_AzMan_AzAuthorizationStore] FOREIGN KEY ( [StoreID] ) REFERENCES [dbo].[AzMan_AzAuthorizationStore] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_AzOperation] ADD CONSTRAINT [FK_AzMan_AzOperation_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_AzScope] ADD CONSTRAINT [FK_AzMan_AzScope_AzMan_AzApplication] FOREIGN KEY ( [AppID] ) REFERENCES [dbo].[AzMan_AzApplication] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_BizRule_To_Group] ADD CONSTRAINT [FK_AzMan_BizRule_To_Group_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_BizRule_To_Group_AzManBizrule] FOREIGN KEY ( [BizRuleID] ) REFERENCES [dbo].[AzMan_BizRule] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_BizRule_To_Group] PRIMARY KEY CLUSTERED ( [BizRuleID], [GroupID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_BizRule_To_Task] ADD CONSTRAINT [FK_AzMan_BizRule_To_Task_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_BizRule_To_Task_AzManBizrule] FOREIGN KEY ( [BizRuleID] ) REFERENCES [dbo].[AzMan_BizRule] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_BizRule_To_Task] PRIMARY KEY CLUSTERED ( [BizRuleID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_AppMember] ADD CONSTRAINT [FK_AzMan_Group_AppMember_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Group_AppMember] PRIMARY KEY CLUSTERED ( [GroupID], [ChildID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Group_SIDMember] ADD CONSTRAINT [FK_AzMan_Group_SIDMember_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Group_SIDMember] PRIMARY KEY CLUSTERED ( [GroupID], [MemberSID], [Member] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_LDAPQuery] ADD CONSTRAINT [FK_AzMan_LDAPQuery_AzMan_AzApplicationGroup] FOREIGN KEY ( [GroupID] ) REFERENCES [dbo].[AzMan_AzApplicationGroup] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE GO ALTER TABLE [dbo].[AzMan_Role_AppMember] ADD CONSTRAINT [FK_AzMan_Role_AppMember_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_AppMember] PRIMARY KEY CLUSTERED ( [RoleID], [ChildID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_SIDMember] ADD CONSTRAINT [FK_AzMan_Role_SIDMember_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_SIDMember] PRIMARY KEY CLUSTERED ( [RoleID], [MemberSID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_To_Operation_Link] ADD CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY ( [OperationID] ) REFERENCES [dbo].[AzMan_AzOperation] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Role_To_Operation_Link_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Role_To_Operation_Link] PRIMARY KEY CLUSTERED ( [RoleID], [OperationID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Role_To_Task_Link] ADD CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzRoleAssignment] FOREIGN KEY ( [RoleID] ) REFERENCES [dbo].[AzMan_AzRoleAssignment] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Role_To_Task_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [PK_AzMan_Role_To_Task_Link] PRIMARY KEY CLUSTERED ( [RoleID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Task_To_Operation_Link] ADD CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzOperation] FOREIGN KEY ( [OperationID] ) REFERENCES [dbo].[AzMan_AzOperation] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [FK_AzMan_Task_To_Operation_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE , CONSTRAINT [PK_AzMan_Task_To_Operation_Link] PRIMARY KEY CLUSTERED ( [OperationID], [TaskID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[AzMan_Task_To_Task_Link] ADD CONSTRAINT [FK_AzMan_Task_To_Task_Link_AzMan_AzTask] FOREIGN KEY ( [TaskID] ) REFERENCES [dbo].[AzMan_AzTask] ( [ID] ) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT [PK_AzMan_Task_To_Task_Link] PRIMARY KEY CLUSTERED ( [TaskID], [ChildID] ) ON [PRIMARY] GO --Trigger for updating Timestamps CREATE TRIGGER TR_updateStoreTimeStampOnAppDelete ON dbo.[AzMan_AzApplication] FOR delete AS UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT StoreID FROM deleted) go CREATE TRIGGER TR_updateStoreTimeStampOnAppModified ON dbo.[AzMan_AzApplication] FOR INSERT,UPDATE AS UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT StoreID FROM inserted) go CREATE TRIGGER TR_updateAppTimeStampOnScopeDelete ON dbo.[AzMan_AzScope] FOR delete AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM deleted) go CREATE TRIGGER TR_updateAppTimeStampOnScoprModified ON dbo.[AzMan_AzScope] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM inserted) go CREATE TRIGGER TR_UpdateAppTimeStampOnOpChange ON dbo.[AzMan_AzOperation] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM inserted) go CREATE TRIGGER TR_UpdateAppTimeStampOnOpDelete ON dbo.[AzMan_AzOperation] FOR delete AS UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT AppID FROM deleted) go Create Procedure UpdateGroupsParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 0 Begin UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO Create Procedure UpdateTasksParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO Create Procedure UpdateRolesParentTimeStamp ( @ParentId [int] , @ParentType [tinyint] ) as if @ParentType = 1 -- App Begin UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end else if @ParentType = 4 -- Scope Begin UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID=@ParentId end GO CREATE TRIGGER TR_UpdateParentTimeStampOnGroupDelete ON dbo.[AzMan_AzApplicationGroup] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @StoreID INT Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 0 Begin set @ParentID = @StoreID End else if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateGroupsParentTimeStamp @ParentID, @ParentType End go CREATE TRIGGER TR_UpdateParentTimeStampOnGroupInsOrUpd ON dbo.[AzMan_AzApplicationGroup] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @StoreID INT Declare @AppID INT Declare @ScopeID INT SELECT @StoreID=StoreID, @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 0 Begin set @ParentID = @StoreID End else if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateGroupsParentTimeStamp @ParentID, @ParentType End go CREATE TRIGGER TR_UpdateParentTimeStampOnTaskDelete ON dbo.[AzMan_AzTask] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateTasksParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnTaskInsOrUpd ON dbo.[AzMan_AzTask] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateTasksParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnRoleDelete ON dbo.[AzMan_AzRoleAssignment] FOR delete AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT -- We need to find the parent first SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM deleted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateRolesParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateParentTimeStampOnRoleInsOrUpd ON dbo.[AzMan_AzRoleAssignment] FOR INSERT,UPDATE AS DECLARE @ParentID INT DECLARE @ParentType TinyInt Declare @AppID INT Declare @ScopeID INT SELECT @AppID=AppID, @ScopeID=ScopeID, @ParentType=ParentType FROM inserted if @@RowCount = 1 Begin if @ParentType = 1 Begin set @ParentID = @AppID End else if @ParentType = 4 Begin set @ParentID = @ScopeID End exec UpdateRolesParentTimeStamp @ParentID, @ParentType end go CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberDel ON dbo.[AzMan_Group_SIDMember] FOR delete AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM deleted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Group_SIDMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM inserted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppdMemberDel ON dbo.[AzMan_Group_AppMember] FOR delete AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM deleted) go CREATE TRIGGER TR_UpdateGroupsTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Group_AppMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzApplicationGroup] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT GroupID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberDel ON dbo.[AzMan_Role_SIDMember] FOR delete AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnSidMemberInsOrUpd ON dbo.[AzMan_Role_SIDMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberDel ON dbo.[AzMan_Role_AppMember] FOR delete AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnAppMemberInsOrUpd ON dbo.[AzMan_Role_AppMember] FOR INSERT,UPDATE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationDelete ON dbo.AzMan_Role_To_Operation_Link FOR DELETE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnOperationInsert ON dbo.AzMan_Role_To_Operation_Link FOR INSERT AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskDelete ON dbo.AzMan_Role_To_Task_Link FOR DELETE AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM deleted) go CREATE TRIGGER TR_UpdateRolesTimeStampOnTaskInsert ON dbo.AzMan_Role_To_Task_Link FOR INSERT AS UPDATE [AzMan_AzRoleAssignment] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT RoleID FROM inserted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationDelete ON dbo.AzMan_Task_To_Operation_Link FOR DELETE AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM deleted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnOperationInsert ON dbo.AzMan_Task_To_Operation_Link FOR INSERT AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM inserted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskDelete ON dbo.AzMan_Task_To_Task_Link FOR DELETE AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM deleted) go CREATE TRIGGER TR_UpdateTaskTimeStampOnTaskInsert ON dbo.AzMan_Task_To_Task_Link FOR INSERT AS UPDATE [AzMan_AzTask] SET [ChildUpdateTimeStamp]=@@DBTS WHERE ID in (SELECT TaskID FROM inserted) go CREATE TRIGGER TR_DeleteGroupForStore ON dbo.[AzMan_AzAuthorizationStore] FOR delete AS delete [AzMan_AzApplicationGroup] where StoreID in (select ID from deleted) go CREATE TRIGGER TR_DeleteGroupForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzApplicationGroup] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteGroupForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzApplicationGroup] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteTaskForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzTask] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteTaskForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzTask] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteRoleForApp ON dbo.[AzMan_AzApplication] FOR delete AS delete [AzMan_AzRoleAssignment] where AppID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteRoleForScope ON dbo.[AzMan_AzScope] FOR delete AS delete [AzMan_AzRoleAssignment] where ScopeID in (SELECT ID FROM deleted) go CREATE TRIGGER TR_DeleteBizRuleForTask ON dbo.[AzMan_BizRule_To_Task] FOR delete AS delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted) go CREATE TRIGGER TR_DeleteBizRuleForGroup ON dbo.[AzMan_BizRule_To_Group] FOR delete AS delete [AzMan_BizRule] where [ID] in (SELECT BizRuleID FROM deleted) go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateObjectAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateObjectAudit] GO Create Procedure [AzMan_SP_GenerateObjectAudit] ( @success int, @event int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @targetType tinyint, @targetName nvarchar(512), @targetGuid uniqueidentifier, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE Exec master.dbo.AzGenerateAudit @success, @event, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @targetType, @targetName, @targetGuid, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateMemberAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateMemberAudit] GO Create Procedure [AzMan_SP_GenerateMemberAudit] ( @success int, @event int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @memberName nvarchar(256), @memberSid varbinary(85), @memberFlag int, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE -- memberFlags: -- 0 for non-members -- 1 for members -- 2 for admins -- 3 for readers -- 4 for delegated users Exec master.dbo.AzGenerateAudit @success, @event, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @memberName, @memberSid, @memberFlag, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GenerateGenericAudit' and type = 'P') DROP PROCEDURE [AzMan_SP_GenerateGenericAudit] GO Create Procedure [AzMan_SP_GenerateGenericAudit] ( @success int, @actObjectType tinyint, @actObjectName nvarchar(512), @actObjectGuid uniqueidentifier, @otherInfo nvarchar(1024) ) AS DECLARE @UserName nvarchar(256) DECLARE @UserSid varbinary(85) SELECT @UserName = User_Name() SELECT @UserSid = SUSER_SID() -- events: -- 6 for SE_AUDITID_AZ_SQL_OTHER Exec master.dbo.AzGenerateAudit @success, 6, @actObjectType, @actObjectName, @actObjectGuid, 0, @UserName, @UserSid, @otherInfo GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPU_SqlRoleUpdated' and type = 'P') DROP PROCEDURE AzMan_SPU_SqlRoleUpdated GO CREATE PROCEDURE dbo.AzMan_SPU_SqlRoleUpdated ( @Return int output, @ObjectID int, @ObjectType tinyint ) AS DECLARE @OldChildTS timestamp -- We can't just manually update the row timestamp because it is a timestamp column. -- So we set-and-reset the ChildUpdateTimeStamp for the update of the timestamp column IF @ObjectType = 0 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzAuthorizationStore] WHERE ID = @ObjectID UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzAuthorizationStore] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END ELSE IF @ObjectType = 1 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzApplication] WHERE ID = @ObjectID UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzApplication] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END ELSE IF @ObjectType = 4 BEGIN SELECT @OldChildTS = [ChildUpdateTimeStamp] FROM [AzMan_AzScope] WHERE ID = @ObjectID UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@OldChildTS + 1 WHERE ID = @ObjectID UPDATE [AzMan_AzScope] SET [ChildUpdateTimeStamp]=@OldChildTS WHERE ID = @ObjectID END SET @Return = @@ERROR RETURN @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GetRoleMemberCount' and type = 'P') DROP PROCEDURE AzMan_SP_GetRoleMemberCount GO CREATE PROCEDURE dbo.AzMan_SP_GetRoleMemberCount ( @SqlRoleName nvarchar(64), @count int output ) AS select @count = count(*) from sysusers u, sysusers g, sysmembers m where g.uid = m.groupuid and g.name = @SqlRoleName and g.issqlrole = 1 and u.uid = m.memberuid RETURN GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_GetSQLRole' and type = 'P') DROP PROCEDURE AzMan_SP_GetSQLRole GO Create Procedure [AzMan_SP_GetSQLRole] ( @Return [int] output, @ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) output ) As Set @Return = 0 Select @SQLRoleName = SQLRoleName from Azman_SQLRole where ObjectID = @ID and ObjectType = @ObjectType and RoleType = @RoleType Go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPI_SQLRole GO Create PROCEDURE dbo.AzMan_SPI_SQLRole ( @Return [int] output ,@ID int ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) output ) AS Set @SQLRoleName = '' DECLARE @myid uniqueidentifier DECLARE @RoleID smallint DECLARE @Ret [int] declare @dbName nvarchar (255) Set @Return = 0 SET @myid = NEWID() Set @SQLRoleName = CONVERT(varchar(64), @myid) Set @RoleID = 1 If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1 Begin EXEC @Ret = sp_addrole @SQLRoleName End else begin Set @dbName = db_name() Exec master.dbo.xp_AzManAddRole @Ret output, @ID, @ObjectType, @dbName, @SQLRoleName End if @Ret = 0 Begin select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1) Insert Into [dbo].[Azman_SQLRole] ( [uid], [ObjectID], [ObjectType], [SQLRoleName], [RoleType] ) Values ( @RoleID, @ID, @ObjectType, @SQLRoleName, @RoleType ) End Else Begin Set @Return = -1 End Return @Return go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPI_SQLRole_From_XP GO Create PROCEDURE dbo.AzMan_SPI_SQLRole_From_XP ( @Return [int] output ,@SQLRoleName [nvarchar] (64) ) AS DECLARE @RoleID smallint DECLARE @Ret [int] Set @Return = -1 Set @RoleID = -1 EXEC @Ret = sp_addrole @SQLRoleName if @Ret = 0 Begin select @RoleID = uid from sysusers where (name = @SQLRoleName) and (issqlrole = 1) if @RoleID <> -1 Begin set @Return = 0 End End Else Begin Set @Return = -1 End Return @Return go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP GO CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole_From_XP ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] Declare @NameInDB [nvarchar] (255) Declare @SQLRoleName [nvarchar] (64) DECLARE @RoleMemberCount [int] Set @Return = -1 Set @SQLRoleName = NULL Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if len(@SQLRoleName) > 0 Begin set @NameInDB = null SET @Ret = 0 -- if no such loging yet, then grant the user login IF NOT EXISTS (SELECT * FROM master..syslogins WHERE UPPER(loginname) = UPPER(@UserName) AND hasaccess=1) BEGIN EXEC @Ret = sp_grantlogin @UserName END -- if the user does not have access to the db IF @Ret= 0 AND NOT EXISTS (SELECT * FROM sysusers WHERE UPPER(Name) = UPPER(@UserName) AND hasdbaccess = 1) BEGIN EXEC @Ret = sp_grantdbaccess @UserName, @NameInDB output END -- workaround for now sp_grantdbaccess returns 1 when the user already has access if @Ret= 0 or len(@NameInDB) > 0 BEGIN Exec @Ret = sp_addrolemember @SQLRoleName, @UserName -- if the user is successfully added to a scope's role IF @Ret = 0 AND @ObjectType = 4 -- scope BEGIN EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @RoleMemberCount > 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 WHERE dbo.AzMan_AzScope.ID = @ID END END End Set @Return = @Ret GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_SQLRole GO CREATE PROCEDURE AzMan_SPI_Add_User_To_SQLRole ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ,@SaclIsOn [bit] ) AS DECLARE @Ret [int] Declare @NameInDB [nvarchar] (255) DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier DECLARE @MemberType int declare @dbName nvarchar (255) DECLARE @RoleMemberCount [int] Set @Return = -1 -- get info for auditing IF @SaclIsOn = 1 BEGIN IF @ObjectType = 0 -- store SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID=@ID IF @ObjectType = 1 -- app SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID=@ID IF @ObjectType = 4 -- scope SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID=@ID IF @RoleType = 1 -- admin SET @MemberType = 2 IF @RoleType = 2 -- reader SET @MemberType = 3 IF @RoleType = 3 -- delegated users SET @MemberType = 4 END set @NameInDB = null If Is_Member('db_owner') = 1 Begin exec AzMan_SPI_Add_User_To_SQLRole_From_XP @Return output, @ID, @ObjectType, @RoleType, @UserName End else Begin Set @dbName = db_name() Exec master.dbo.xp_AzManAddUserToRole @Return output, @ID, @ObjectType, @RoleType, @dbName, @UserName End -- trigger the parent object's update timestamp IF @Return = 0 BEGIN Exec AzMan_SPU_SqlRoleUpdated @Ret output, @ID, @ObjectType IF @ObjectType = 4 -- scope BEGIN EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @RoleMemberCount > 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 1 WHERE dbo.AzMan_AzScope.ID = @ID END END -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 0 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN @ObjectType, @ObjectName, @ObjectGuid, @UserName, @UserSid, @MemberType, -- member type N'' -- no other info END Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Create_SqlRole_For_Object' and type = 'P') DROP PROCEDURE AzMan_SPI_Create_SqlRole_For_Object GO CREATE PROCEDURE AzMan_SPI_Create_SqlRole_For_Object ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (255) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is NULL begin Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output if @Return <> 1 begin Set @Return = -5 goto Done end -- we have proper access, then insert the role Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output end Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPI_Add_User_To_Role' and type = 'P') DROP PROCEDURE AzMan_SPI_Add_User_To_Role GO CREATE PROCEDURE AzMan_SPI_Add_User_To_Role ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (255) Declare @NameInDB [nvarchar] (255) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output IF @Return <> 1 BEGIN Set @Return = -5 goto Done END Set @Return = -1 Exec dbo.[AzMan_SP_GetSQLRole] @Ret output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is NULL Begin Exec AzMan_SPI_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output End if @SQLRoleName is NOT NULL Begin Exec AzMan_SPI_Add_User_To_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn End Else Begin Set @Return = -1 End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_SQLRole_From_XP' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP GO CREATE PROCEDURE AzMan_SPD_User_From_SQLRole_From_XP ( @Return [int] output ,@SQLRoleName [nvarchar] (64) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] SET NOCOUNT ON Set @Return = -1 Exec @Ret = sp_droprolemember @SQLRoleName, @UserName if @Ret <> 0 Begin Set @Return = -1 End Else Begin Set @Return = 0 End SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_SQLRole GO CREATE PROCEDURE AzMan_SPD_User_From_SQLRole ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@SQLRoleName [nvarchar] (64) ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ,@SaclIsOn [bit] ) AS DECLARE @Ret [int] DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier DECLARE @MemberType int Declare @DbName [nvarchar] (255) DECLARE @RoleMemberCount int DECLARE @OtherRoleMemberCount int DECLARE @OtherRoleName [nvarchar] (64) Set @Return = -1 If is_Member('db_owner') = 1 or is_Member('db_securityadmin') = 1 or is_member('db_accessyadmin') = 1 Begin Exec @Ret = sp_droprolemember @SQLRoleName, @UserName End else begin Set @DbName = db_name() Exec master.dbo.xp_AzManRemoveUserFromRole @Ret output, @ID, @ObjectType, @DbName, @SQLRoleName, @UserName End if @Ret <> 0 Begin Set @Return = -1 End Else Begin -- trigger the parent object's update timestamp Set @Return = 0 Exec AzMan_SPU_SqlRoleUpdated @Return output, @ID, @ObjectType -- if the delete is successful to a scope role IF @Return = 0 AND @ObjectType = 4 BEGIN -- we need to get the other role's name for the scope SET @OtherRoleName = NULL IF @RoleType = 1 -- admin Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 2, @OtherRoleName output ELSE IF @RoleType = 2 -- reader Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, 1, @OtherRoleName output SET @RoleMemberCount = 0 SET @OtherRoleMemberCount = 0 IF @SQLRoleName IS NOT NULL EXEC AzMan_SP_GetRoleMemberCount @SQLRoleName, @RoleMemberCount output IF @OtherRoleName IS NOT NULL EXEC AzMan_SP_GetRoleMemberCount @OtherRoleName, @OtherRoleMemberCount output IF @RoleMemberCount = 0 AND @OtherRoleMemberCount = 0 UPDATE dbo.AzMan_AzScope SET dbo.AzMan_AzScope.HasSpecificUsers = 0 WHERE dbo.AzMan_AzScope.ID = @ID END End -- get info for auditing IF @SaclIsOn = 1 BEGIN IF @ObjectType = 0 -- store SELECT @ObjectName = store.Name, @ObjectGuid=store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID=@ID IF @ObjectType = 1 -- app SELECT @ObjectName = app.Name, @ObjectGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID=@ID IF @ObjectType = 4 -- scope SELECT @ObjectName = scope.Name, @ObjectGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID=@ID IF @RoleType = 1 -- admin SET @MemberType = 2 IF @RoleType = 2 -- reader SET @MemberType = 3 IF @RoleType = 3 -- delegated users SET @MemberType = 4 -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 0 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE @ObjectType, @ObjectName, @ObjectGuid, @UserName, @UserSid, @MemberType, -- member type N'' -- no other info END Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_User_From_Role' and type = 'P') DROP PROCEDURE AzMan_SPD_User_From_Role GO CREATE PROCEDURE AzMan_SPD_User_From_Role ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ,@UserSid varbinary(85) ,@UserName [nvarchar] (255) ) AS DECLARE @Ret [int] DECLARE @SQLRoleName [nvarchar] (64) DECLARE @SaclIsOn [bit] DECLARE @AccessAtObjType tinyint Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ID, @ObjectType, 1, @SaclIsOn output IF @Return <> 1 BEGIN Set @Return = -5 goto Done END Set @Return = -1 Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName Is not NULL Begin Exec AzMan_SPD_User_From_SQLRole @Return output, @ID, @ObjectType, @RoleType, @SQLRoleName, @UserSid, @UserName, @SaclIsOn End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_DBOwners' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_DBOwners GO CREATE PROCEDURE AzMan_SPS_Get_DBOwners ( @Return [int] output, @ID [int] ) AS SET NOCOUNT ON -- @ID is not used. But our internal implementation requires non-empty -- parameter set where @Return is not considered one of them. EXEC @Return = sp_helprolemember 'db_owner' SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_Role_For_Object' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_Role_For_Object GO CREATE PROCEDURE AzMan_SPS_Get_Role_For_Object ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@RoleType [tinyint] ) AS DECLARE @SQLRoleName [nvarchar] (64) SET NOCOUNT ON Set @SQLRoleName = NULL Set @Return = 0 Select @SQLRoleName = SQLRoleName From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = @RoleType if @SQLRoleName is not NULL Begin EXEC @Return = sp_helprolemember @SQLRoleName End SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Get_Object_Path_For_Container' and type = 'P') DROP PROCEDURE AzMan_SP_Get_Object_Path_For_Container GO Create Procedure [AzMan_SP_Get_Object_Path_For_Container] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@StoreID [int] output ,@AppID [int] output ,@ScopeID [int] output ) AS DECLARE @RowCount INT, @Error INT Declare @ParentID [int] Declare @ParentType [int] Set @StoreID = -1 Set @AppID = -1 Set @ScopeID = -1 Set @Return = 0 if @ObjectType = 0 --Store Begin Set @StoreID = @ID End if @ObjectType = 1 -- App Begin Select @StoreID=StoreID From AzMan_AzApplication where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin Set @AppID = @ID End End If @ObjectType = 4 -- Scope Begin Select @AppID = AppID From [AzMan_AzScope] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 1 Begin Select @StoreID = StoreID From AzMan_AzApplication where ID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin Set @ScopeID = @ID End End else Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End End Return @Return Go IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Get_Object_Path' and type = 'P') DROP PROCEDURE AzMan_SP_Get_Object_Path GO Create Procedure [AzMan_SP_Get_Object_Path] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ,@StoreID [int] output ,@AppID [int] output ,@ScopeID [int] output ) AS Declare @ParentID [int] Declare @ParentType [int] DECLARE @RowCount INT, @Error INT Set @StoreID = -1 Set @AppID = -1 Set @ScopeID = -1 Set @Return = 0 if @ObjectType = 0 --Store Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End if @ObjectType = 1 -- App Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End If @ObjectType = 2 -- Operation Begin Select @AppID= AppID From [AzMan_AzOperation] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End Else Begin Select @StoreID =StoreID From AzMan_AzApplication where ID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End End goto Return_Get_ObjPath End If @ObjectType = 4 -- Scope Begin Exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output goto Return_Get_ObjPath End If @ObjectType = 3 -- Task Begin Select @ParentID = case ParentType when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from [AzMan_AzTask] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End If @ObjectType = 5 -- Group Begin Select @ParentID = case ParentType when 0 then StoreID when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from [AzMan_AzApplicationGroup] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End If @ObjectType = 6 -- Role Begin Select @ParentID = case ParentType when 1 then AppID when 4 then ScopeID end, @ParentType = ParentType from AzMan_AzRoleAssignment where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT End if @RowCount <> 1 Begin if @Error = 0 Begin Set @Return = -1168 -- Record not found End Else Begin Set @Return = @Error End End else Begin exec AzMan_SP_Get_Object_Path_For_Container @Return output, @ParentID, @ParentType, @StoreID output, @AppID output, @ScopeID output End Return_Get_ObjPath: Return @Return Go -- Access Check Store Procedure IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_AccessCheck_For_Container' and type = 'P') DROP PROCEDURE AzMan_SP_AccessCheck_For_Container GO Create Procedure [AzMan_SP_AccessCheck_For_Container] ( @Return [int] output ,@ID [int] ,@ObjectType [tinyint] ) As -- Check MemberShip starting with current node and going up Declare @SQLRoleName [nvarchar](64) Declare @SQLRoleType [TinyInt] Set @Return = -5 -- Check Admin Set @SQLRoleType = 1 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output -- Is a member of admin if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 1 -- Admin Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End -- Is a member of Reader? Set @SQLRoleType = 2 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 2 -- Reader Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End -- Is a member of Delegated Users? Set @SQLRoleType = 3 Set @SQLRoleName = '' Exec [AzMan_SP_GetSQLRole] @Return output, @ID, @ObjectType, @SQLRoleType, @SQLRoleName = @SQLRoleName output if @SQLRoleName <> '' Begin If Is_Member(@SQLRoleName) = 1 Begin Set @Return = 3 -- Delegated user Access Goto Exit_AzMan_SP_AccessCheck_For_Container End End Exit_AzMan_SP_AccessCheck_For_Container: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_AccessCheck' and type = 'P') DROP PROCEDURE AzMan_SP_AccessCheck GO Create Procedure [AzMan_SP_AccessCheck] ( @Return [int] output ,@AccessAtObjType [tinyint] output ,@ID [int] ,@ObjectType [tinyint] ,@CheckSacl [bit] = 0 ,@SaclIsOn [bit] output ) As -- Check MemberShip starting with current node and going up Declare @SQLRoleName [nvarchar](64) Declare @SQLRoleType [TinyInt] Declare @StoreID [int] Declare @AppID [int] Declare @ScopeID [int] Declare @StoreAccess [int] -- If this bit is set we know access check result, but we need to do SACL Declare @CheckSaclOnly [int] Declare @TempRet [int] Set @Return = -5 Set @StoreAccess = -5 Set @AccessAtObjType = 0 -- default to SACL off Set @SaclIsOn = 0 Set @CheckSaclOnly = 0 -- If the user is a DB_Owner, he has full control if Is_Member('db_owner') = 1 Begin set @Return = 1 --print 'User is member of db_Owner' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End else if Is_Member('db_datawriter') = 1 -- If the user is a data writer he has full control Begin set @Return = 1 --print 'User is member of db_datawriter' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End else if Is_Member('db_datareader') = 1 -- If the user is a data reader he has read control Begin set @Return = 2 --print 'User is member of db_datareader' IF @CheckSacl = 0 Goto Exit_AzMan_SP_AccessCheck ELSE Set @CheckSaclOnly = 1 End IF @CheckSaclOnly = 1 Set @TempRet = @Return -- Go all the way up to the store -- Check Access from top to bottom Exec AzMan_SP_Get_Object_Path @Return output, @ID, @ObjectType , @StoreID output, @AppID output, @ScopeID output -- Error ? Record not found if @Return < 0 Begin goto Exit_AzMan_SP_AccessCheck End -- we honor application's SACL setting over the store's IF @CheckSacl = 1 AND @StoreID <> -1 AND @AppID <> -1 BEGIN SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzApplication App WHERE App.ID = @AppID AND App.StoreID = @StoreID END ELSE IF @CheckSacl = 1 AND @StoreID <> -1 BEGIN SELECT @SaclIsOn = IsNull(ApplyStoreSacl, 0) FROM AzMan_AzAuthorizationStore Store WHERE Store.ID = @StoreID END -- if we are only to check SACL settings (in other words, we already know the answer of access) IF @CheckSaclOnly = 1 Goto Exit_AzMan_SP_AccessCheck if @StoreID <> -1 Begin set @AccessAtObjType = 0 Exec AzMan_SP_AccessCheck_For_Container @Return output, @StoreID, 0 Set @StoreAccess = @Return if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End else Begin Goto Exit_AzMan_SP_AccessCheck End if @AppID <> -1 Begin set @AccessAtObjType = 1 Exec AzMan_SP_AccessCheck_For_Container @Return output, @AppID, 1 if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End else Begin Goto Exit_AzMan_SP_AccessCheck End if @ScopeID <> -1 Begin set @AccessAtObjType = 4 Exec AzMan_SP_AccessCheck_For_Container @Return output, @ScopeID, 4 if @Return <= 2 Begin Goto Exit_AzMan_SP_AccessCheck End End Begin Goto Exit_AzMan_SP_AccessCheck End Exit_AzMan_SP_AccessCheck: IF @CheckSaclOnly = 1 Set @Return = @TempRet Return @Return GO Create PROCEDURE dbo.AzMan_SPS_Get_StoreIDByName ( @Return [int] output, @ID int OUTPUT, @Name nvarchar(512) ) AS Set @ID = -1 -- this means it doesn't exist Set @Return = 0 SELECT @ID = ID FROM AzMan_AzAuthorizationStore WHERE Name = @Name RETURN @@RowCount go Create Procedure [AzMan_SP_Check_Dup_Task_For_Given_Parent] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ParentType = @ParentType and AppID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ParentType = @ParentType and ScopeID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else Begin Set @Return = -87 -- invalid parameter End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Task] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Declare @ParentAppID [int] Set @Return = 0 Set @ParentAppID = 0 -- First Check the current Parent exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name if @Return <> 0 Begin Return(@Return) End -- Behave differently depending on the object type of the parent object -- A task that is a child of an application -- cannot have the same name as any tasks that are children of any of the child scopes. if @ParentType = 1 -- Application Begin Set @ParentAppID = @ParentID if Exists( Select [Name] from [dbo].[AzMan_AzTask] where ( ParentType = 4 ) -- All Child scope and LOWER([Name]) = LOWER(@Name) and (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 -- Scope Begin -- A task that is a child of a scope, -- cannot have the same name as tasks that are children of the application. -- Find the Parent App Select @ParentAppID = [AppID] from AzMan_AzScope where [ID] = @ParentID if ( @ParentAppID = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Task_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name End End -- Tasks and operations share a namespace so ensure there -- isn't an operation by this name. if @Return = 0 Begin if Exists( Select [Name] from [dbo].[AzMan_AzOperation] where LOWER([Name]) = LOWER(@Name) and (@ParentAppID = AppID) ) Begin Set @Return = -183 -- Same Name exist End End Return @Return go Create Procedure [AzMan_SP_Check_Dup_RoleAssignment] ( @Return [int] output, @ParentID [int], @ParentType [tinyint], @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzRoleAssignment] where ParentType = @ParentType and AppID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzRoleAssignment] where ParentType = @ParentType and ScopeID = @ParentID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End End Else Begin Set @Return = -1 End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Application] ( @Return [int] output, @StoreID [int], @ID [int], @Name [nvarchar](512) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if Exists( Select [Name] from [dbo].[AzMan_AzApplication] where StoreID = @StoreID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Scope] ( @Return [int] output, @AppID [int], @ID [int], @NameHash [binary] (32) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level begin if Exists( Select ID from [dbo].[AzMan_AzScope] where ID <> IsNULL(@ID,0) and AppID = @AppID and [NameHash] = @NameHash ) Begin Set @Return = -183 -- Same Name exist End end Return @Return go Create Procedure [AzMan_SP_Check_Dup_Operation] ( @Return [int] output, @AppID [int], @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 -- Make sure that the name doesn't exist at the same level if Exists( Select [Name] from [dbo].[AzMan_AzOperation] where AppID = @AppID and ID <> IsNULL(@ID,0) and LOWER([Name]) = LOWER(@Name) ) Begin Set @Return = -183 -- Same Name exist End Return @Return go Create Procedure [AzMan_SP_Check_Dup_Group_For_Given_Parent] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Set @Return = 0 if @ParentType = 0 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (StoreID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 1 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (AppID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 4 Begin if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = @ParentType ) and (ScopeID = @ParentID) and LOWER([Name]) = LOWER(@Name) and ID <> IsNULL(@ID,0) ) Begin Set @Return = -183 -- Same Name exist End End Else Begin Set @Return = -1 Return (@Return) End Return(@Return) GO Create Procedure [AzMan_SP_Check_Dup_Group] ( @Return [int] output, @ParentID [int], @ParentType [tinyint] , @ID [int], @Name [nvarchar](64) ) AS Declare @ParentStore [int] Declare @ParentAppID [int] Set @Return = 0 Set @ParentStore = 0 Set @ParentAppID = 0 -- First Check the current Parent exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentID, @ParentType, @ID, @Name if @Return <> 0 Begin Return(@Return) End -- Behave differently depending on the object type of the parent object -- -- A group that is a child of the authorization store, -- cannot have the same name as any groups that are children of any of the child applications, and -- cannot have the same name as any groups that are children of any of the grandchild child scopes. if @ParentType = 0 -- Auth Store Begin if Exists( Select ID from [dbo].[AzMan_AzApplicationGroup] where ( ( ID <> IsNULL(@ID,0) ) and ( [Name] = @Name ) and ( ( ( ParentType = 1 ) and -- Application ( AppID in ( select ID from AzMan_AzApplication where StoreID = @ParentID ) ) ) or ( ( ParentType = 4 ) and -- Scope ( ScopeID in ( select ID from AzMan_AzScope where AppID in (select ID from AzMan_AzApplication where StoreID = @ParentID) ) ) ) ) ) ) Begin Set @Return = -183 -- Same Name exist End End else if @ParentType = 1 -- Application Begin -- A group that is a child of an application -- cannot have the same name as groups that are children of the authorization store, -- and cannot have the same name as any groups that are children of any of the child scopes. -- Find the parent of Application Select @ParentStore = [StoreID] from AzMan_AzApplication where [ID] = @ParentID if ( @ParentStore = 0 ) Begin Set @Return = -1 -- General Error End Else Begin -- and Check for conflict exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name End if ( @Return = 0 ) Begin -- Find All the Child scopes of parent and check for conflicts if Exists( Select [Name] from [dbo].[AzMan_AzApplicationGroup] where ( ParentType = 4 ) -- All Child scope and LOWER([Name]) = LOWER(@Name) and (@ParentID IN ( Select AppID from AzMan_AzScope where AppID = @ParentID and ID <> IsNULL(@ID,0)) ) ) Begin Set @Return = -183 -- Same Name exist End End End else if @ParentType = 4 -- Scope Begin -- A group that is a child of a scope, -- cannot have the same name as groups that are children of the application or authorization store -- Find the Parent App Select @ParentAppID = [AppID] from AzMan_AzScope where [ID] = @ParentID if ( @ParentAppID = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentAppID, 1, @ID, @Name if @Return = 0 Begin -- Find the Parent Store Select @ParentStore = [StoreID] from AzMan_AzApplication where [ID] = @ParentAppID if ( @ParentStore = 0 ) Begin Set @Return = -1 -- General Error End else Begin exec AzMan_SP_Check_Dup_Group_For_Given_Parent @Return output, @ParentStore, 0, @ID, @Name End End End End Return(@Return) GO Create Procedure [AzMan_SPI_AzAuthorizationStore] -- Inserts a new record in [AzMan_AzAuthorizationStore] table ( @Return [int] output , @ID [int] OUTPUT , @ObjectGuid [uniqueidentifier] = Null , @DomainTimeout [int] = Null , @ScriptEngineTimeout [int] = Null , @MaxScriptEngines [int] = Null , @ApplyStoreSacl [bit] = Null , @GenerateAudits [bit] = 0 , @MajorVersion [int] = 1 , @MinorVersion [int] = 0 , @TargetMachine [nvarchar](50) = Null , @Description [nvarchar](1024) = Null , @Name [nvarchar] (512) = NULL , @ApplicationData [ntext] = Null ) as DECLARE @RowCount INT, @Error INT Set @Return = 0 Set @ID = 0 Set NoCount On Begin Insert Into [dbo].[AzMan_AzAuthorizationStore] ( [ObjectGuid] , [Name] , [Description] , [ApplicationData] , [DomainTimeout] , [ScriptEngineTimeout] , [MaxScriptEngines] , [TargetMachine] , [ApplyStoreSacl] , [GenerateAudits] , [MajorVersion] , [MinorVersion] ) Values ( @ObjectGuid , @Name , @Description , @ApplicationData , @DomainTimeout , @ScriptEngineTimeout , @MaxScriptEngines , @TargetMachine , @ApplyStoreSacl , @GenerateAudits , @MajorVersion , @MinorVersion ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End else Begin Set @Return = @Error End -- generate a generic audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 0, -- 0 for store @Name, @ObjectGuid, N'Trying to create an AzAuthorizationStore' -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 0, -- 0 for store @Name, @ObjectGuid, 0, -- 0 for store @Name, @ObjectGuid, N'' -- no other info End Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplication] -- Inserts a new record in [AzMan_AzApplication] table ( @Return [int] output , @ID [int] = Null Output , @ObjectGuid [uniqueidentifier] = Null , @StoreId [int] , @ApplyStoreSacl [bit] = Null , @GenerateAudits [bit] = Null , @AuthzInterfaceClsId [int] = Null , @CheckDup [bit] = 1 , @ApplicationVersion [nvarchar](50) = Null , @Name [nvarchar](512) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On Begin DECLARE @RowCount INT, @Error INT DECLARE @storeName [nvarchar](512) DECLARE @storeGuid [uniqueidentifier] Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @StoreId, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- Check for duplicate name IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzApplication] ( [ObjectGuid] , [StoreID] , [Name] , [Description] , [ApplicationData] , [ApplyStoreSacl] , [GenerateAudits] , [AuthzInterfaceClsId] , [ApplicationVersion] ) Values ( @ObjectGuid , @StoreId , @Name , @Description , @ApplicationData , @ApplyStoreSacl , @GenerateAudits , @AuthzInterfaceClsId , @ApplicationVersion ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End -- generate an audit if SACL is on IF @SaclIsOn = 1 BEGIN -- get the store info SELECT @storeName = Store.Name, @storeGuid = Store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] Store WHERE Store.ID = @StoreId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 0, -- 0 for store @storeName, @storeGuid, 1, -- 1 for Application @Name, @ObjectGuid, N'' -- no other info END End End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzApplication] -- Update an existing record in [AzMan_AzApplication] table ( @Return [int] output , @ID [int] , @StoreId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @ApplyStoreSacl [bit] = Null , @ConsiderNull_ApplyStoreSacl bit = 0 , @GenerateAudits [bit] = Null , @ConsiderNull_GenerateAudits bit = 0 , @AuthzInterfaceClsId [int] = Null , @ConsiderNull_AuthzInterfaceClsId bit = 0 , @ConsiderNull_ApplicationVersion bit = 0 , @ApplicationVersion [nvarchar](50) = Null , @Name [nvarchar](512) , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_ApplyStoreSacl Is Null Set @ConsiderNull_ApplyStoreSacl = 0 If @ConsiderNull_GenerateAudits Is Null Set @ConsiderNull_GenerateAudits = 0 If @ConsiderNull_AuthzInterfaceClsId Is Null Set @ConsiderNull_AuthzInterfaceClsId = 0 If @ConsiderNull_ApplicationVersion Is Null Set @ConsiderNull_ApplicationVersion = 0 IF @Name Is Not NULL Begin -- Check for duplicate name Exec AzMan_SP_Check_Dup_Application @Return output, @StoreId, @ID, @Name End If @Return = 0 Begin Update [dbo].[AzMan_AzApplication] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End ,[AuthzInterfaceClsId] = Case @ConsiderNull_AuthzInterfaceClsId When 0 Then IsNull(@AuthzInterfaceClsId, [AuthzInterfaceClsId]) When 1 Then @AuthzInterfaceClsId End ,[ApplicationVersion] = Case @ConsiderNull_ApplicationVersion When 0 Then IsNull(@ApplicationVersion, [ApplicationVersion]) When 1 Then @ApplicationVersion End Where ([ID] = @ID) End -- generate an audit if SACL is on IF @SaclIsOn = 1 BEGIN -- get info for auditing SELECT @ObjectGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 1, -- 0 for application @Name, @ObjectGuid, N'The shallow properties of the application may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzScope] -- Inserts a new record in [AzMan_AzScope] table ( @Return [int] output , @ID [int] = Null output , @AppId [int] = Null , @NameLen [int] = 0 , @NameHash [Binary] (32) = NULL , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Description [nvarchar](1024) = Null , @Name [ntext] , @ApplicationData [ntext] = Null ) As DECLARE @appName nvarchar(512) DECLARE @appGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Begin DECLARE @RowCount INT, @Error INT Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppId, 1, 1, @SaclIsOn output -- Require Admin Access at App if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, -1, @NameHash End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzScope] ( [AppID] , [Name] , [NameLen] , [NameHash] , [Description] , [ApplicationData] , [ObjectGuid] ) Values ( @AppId , @Name , @NameLen , @NameHash , @Description , @ApplicationData , @ObjectGuid ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get the store info for auditing SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @AppId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 1, -- 1 for Application @appName, @appGuid, 4, -- 4 for scope @Name, @ObjectGuid, N'' -- no other info END End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzOperation] -- Inserts a new record in [AzMan_AzOperation] table ( @Return [int] output , @ID [int] = Null Output , @OperationID [int] = Null , @AppId [int] = Null , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @appName nvarchar(512) DECLARE @appGuid uniqueidentifier DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @AppId, 1, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- if check dup IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzOperation] ( [ObjectGuid] , [AppID] , [Name] , [Description] , [ApplicationData] , [OperationID] ) Values ( @ObjectGuid , @AppId , @Name , @Description , @ApplicationData , @OperationID ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get the store info for auditing SELECT @appName = app.Name, @appGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @AppId -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE 1, -- 1 for Application @appName, @appGuid, 2, -- 2 for operation @Name, @ObjectGuid, N'' -- no other info END End Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup] -- Inserts a new record in [AzMan_AzApplicationGroup] table ( @Return [int] output , @ID [int] = Null Output , @ParentId [int] , @ParentType [int] , @GroupType [tinyint] = Null , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null ) As DECLARE @RowCount INT, @Error INT Declare @StoreID int, @AppID int , @ScopeID int -- parent name and guid is only needed for auditing DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 set @StoreID = 0 set @AppID = 0 set @ScopeID = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output, @ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Group @Return output, @ParentId, @ParentType, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin if @ParentType = 0 Begin set @StoreID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ParentId END End else if @ParentType = 1 Begin set @AppID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End else if @ParentType = 4 Begin set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End Insert Into [dbo].[AzMan_AzApplicationGroup] ( [ObjectGuid] , [StoreID] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [GroupType] ) Values ( @ObjectGuid , @StoreID , @AppID , @ScopeID , @ParentType , @Name , @Description , @GroupType ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, -- parent type @parentName, @parentGuid, 5, -- 5 for group @Name, @ObjectGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask] -- Inserts a new record in [AzMan_AzTask] table ( @Return [int] output , @ID [int] = Null Output , @IsRoleDefinition [bit] = 0 , @ParentId [int] , @ParentType [tinyint] , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT Declare @AppID [int], @ScopeID [int] DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @AppID = null Set @ScopeID = null if @ParentType = 1 Begin Set @AppID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End Else if @ParentType = 4 Begin Set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End Else Begin Set @Return = -1 goto Done End -- Make sure that the name doesn't exist at the same level IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_Task @Return output, @ParentId, @ParentType, @ID, @Name End ELSE Set @Return = 0 if @Return = 0 Begin Insert Into [dbo].[AzMan_AzTask] ( [ObjectGuid] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [ApplicationData] , [IsRoleDefinition] ) Values ( @ObjectGuid , @AppID , @ScopeID , @ParentType , @Name , @Description , @ApplicationData , @IsRoleDefinition ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End IF @SaclIsOn = 1 -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, -- parent type @parentName, @parentGuid, 3, -- 3 for task @Name, @ObjectGuid, N'' -- no other info Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Single_Operation] ( @Return [int] output , @TaskID [int] -- ID Of task , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Task_To_Operation_Link] (TaskID, OperationID) VALUES (@TaskID, @OperationID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 3, -- 3 for task @taskName, @taskGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask_Single_Operation] ( @Return [int] output , @TaskID [int] -- ID Of task , @OperationID [int] , @SaclIsOn [bit] ) As Set @Return = 0 DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set NoCount On delete [AzMan_Task_To_Operation_Link] where TaskID = @TaskID and OperationID = @OperationID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 3, -- 3 for task @taskName, @taskGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Multi_Operations] ( @Return [int] output , @TaskID [int] -- ID Of Task , @SepChar [char] (1) = "|" , @OperationIDs [nvarchar] (4000) ) As Set @Return = 0 DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 SET @equal = '=' Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @OperationID varchar(100), @Pos int Declare @iOperationID int SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) IF REPLACE(@OperationIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @iOperationID = CAST(@OperationID as int) -- remove the left part (the id) SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iOperationID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzTask_Single_Operation @Return output, @TaskID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Operation] ( @Return [int] output , @RoleID [int] -- ID Of Role , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_To_Operation_Link] (RoleID, OperationID) VALUES (@RoleID, @OperationID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 2, -- 2 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_Operation] ( @Return [int] output , @RoleID [int] -- ID Of Role assignment , @OperationID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @opName nvarchar(512) DECLARE @opGuid uniqueidentifier Set @Return = 0 Set NoCount On delete [AzMan_Role_To_Operation_Link] where RoleID = @RoleID and OperationID = @OperationID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleID SELECT @opName = Op.Name, @opGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @OperationID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 2, -- 1 for Operation @opName, @opGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Operations] ( @Return [int] output , @RoleID [int] -- ID Of Role , @SepChar [nchar] (1) = "|" , @OperationIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On -- First parse the string -- Insert each one of them Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @OperationID nvarchar(100), @Pos int Declare @iOperationID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @OperationIDs = LTRIM(RTRIM(@OperationIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) IF REPLACE(@OperationIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @OperationID = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @iOperationID = CAST(@OperationID as int) -- remove the left part (the id) SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @OperationIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@OperationIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iOperationID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_Operation @Return output, @RoleID, @iOperationID, @SaclIsOn if @Return <> 0 Begin Break End END END SET @OperationIDs = RIGHT(@OperationIDs, LEN(@OperationIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @OperationIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Single_Task] ( @Return [int] output , @TaskID [int] , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Task_To_Task_Link] (TaskID, ChildID) VALUES (@TaskID, @ChildID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 3, -- 3 for task @taskName, @taskGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask_Single_Task] ( @Return [int] output, @TaskID [int] , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @taskName nvarchar(512) DECLARE @taskGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Task_To_Task_Link] where TaskID = @TaskID and ChildID = @ChildID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @taskName = Task.Name, @taskGuid = Task.ObjectGuid FROM [dbo].[AzMan_AzTask] Task WHERE Task.ID = @TaskID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 3, -- 3 for task @taskName, @taskGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzTask_Multi_Tasks] ( @Return [int] output , @ParentTaskId [int] -- ID Of Task , @SepChar [char] (1) = "|" , @TaskIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentTaskId, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @TaskID varchar(100), @Pos int Declare @iTaskID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) --IF REPLACE(@TaskIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @iTaskID = CAST(@TaskID as int) -- remove the left part (the id) SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iTaskID <> 0 BEGIN if @isAdd <> 0 Begin Exec AzMan_SPI_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End else Begin Exec AzMan_SPD_AzTask_Single_Task @Return output, @ParentTaskId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_Task] ( @Return [int] output, @RoleID [int] -- ID Of Role , @TaskID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_To_Task_Link] (RoleID, TaskID) VALUES (@RoleID, @TaskID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End IF @SaclIsOn = 1 BEGIN -- get the info for auditing SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleID SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @TaskID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure AzMan_SPD_AzRoleAssignment_Single_Task ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @TaskID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refTaskName nvarchar(512) DECLARE @refTaskGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Role_To_Task_Link] where TaskID = @TaskID and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get the info for auditing SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refTaskName = refTask.Name, @refTaskGuid = refTask.ObjectGuid FROM [dbo].[AzMan_AzTask] refTask WHERE refTask.ID = @TaskID IF @SaclIsOn = 1 BEGIN -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 3, -- 3 for task @refTaskName, @refTaskGuid, N'' -- no other info END Set NoCount Off Return(@Return) go Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_Tasks] ( @Return [int] output , @RoleId [int] , @SepChar [char] (1) = "|" , @TaskIDs [nvarchar] (4000) ) As Set NoCount On Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- First parse the string -- Insert each one of them DECLARE @TaskID varchar(100), @Pos int Declare @iTaskID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' SET @TaskIDs = LTRIM(RTRIM(@TaskIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) IF REPLACE(@TaskIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @TaskID = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @iTaskID = CAST(@TaskID as int) -- remove the left part (the id) SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @TaskIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@TaskIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iTaskID <> 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 Begin Exec [AzMan_SPI_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End else Begin Exec [AzMan_SPD_AzRoleAssignment_Single_Task] @Return output, @RoleId, @iTaskID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @TaskIDs = RIGHT(@TaskIDs, LEN(@TaskIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @TaskIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment] ( @Return [int] output , @ID [int] = Null Output , @ParentId [int] , @ParentType [tinyint] , @ObjectGuid [uniqueidentifier] = Null , @CheckDup [bit] = 1 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT Declare @AppId [int] , @ScopeID [int] DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End IF @CheckDup = 1 BEGIN Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentId, @ParentType, @ID, @Name END ELSE Set @Return = 0 if @Return = 0 Begin Set @AppId = null Set @ScopeID= null if @ParentType = 1 Begin Set @AppId = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName=app.Name, @parentGuid=app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId END End else if @ParentType = 4 Begin Set @ScopeID = @ParentId -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName=scope.Name, @parentGuid=scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END End else Begin Set @Return = -1 Return End Insert Into [dbo].[AzMan_AzRoleAssignment] ( [ObjectGuid] , [AppID] , [ScopeID] , [ParentType] , [Name] , [Description] , [ApplicationData] ) Values ( @ObjectGuid , @AppId , @ScopeID , @ParentType , @Name , @Description , @ApplicationData ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) End Else Begin Set @Return = @Error End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 0, -- 0 for SE_AUDITID_AZ_SQL_OBJECT_CREATE @ParentType, @parentName, @parentGuid, 6, -- 6 for role @Name, @ObjectGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzAuthorizationStore] -- Update an existing record in [AzMan_AzAuthorizationStore] table ( @Return [int] output , @ID [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @DomainTimeout [int] = Null , @ConsiderNull_DomainTimeout bit = 0 , @ScriptEngineTimeout [int] = Null , @ConsiderNull_ScriptEngineTimeout bit = 0 , @MaxScriptEngines [int] = Null , @ConsiderNull_MaxScriptEngines bit = 0 , @ConsiderNull_TargetMachine bit = 0 , @ApplyStoreSacl [bit] = Null , @ConsiderNull_ApplyStoreSacl bit = 0 , @GenerateAudits [bit] = Null , @ConsiderNull_GenerateAudits bit = 0 , @MajorVersion [int] = Null , @ConsiderNull_MajorVersion bit = 0 , @MinorVersion [int] = Null , @ConsiderNull_MinorVersion bit = 0 , @TargetMachine [nvarchar](50) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @RowCount INT, @Error INT DECLARE @ObjectName nvarchar(512) DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- no error If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_DomainTimeout Is Null Set @ConsiderNull_DomainTimeout = 0 If @ConsiderNull_ScriptEngineTimeout Is Null Set @ConsiderNull_ScriptEngineTimeout = 0 If @ConsiderNull_MaxScriptEngines Is Null Set @ConsiderNull_MaxScriptEngines = 0 If @ConsiderNull_TargetMachine Is Null Set @ConsiderNull_TargetMachine = 0 If @ConsiderNull_ApplyStoreSacl Is Null Set @ConsiderNull_ApplyStoreSacl = 0 If @ConsiderNull_GenerateAudits Is Null Set @ConsiderNull_GenerateAudits = 0 If @ConsiderNull_MajorVersion Is Null Set @ConsiderNull_MajorVersion = 0 If @ConsiderNull_MinorVersion Is Null Set @ConsiderNull_MinorVersion = 0 Update [dbo].[AzMan_AzAuthorizationStore] Set [Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[DomainTimeout] = Case @ConsiderNull_DomainTimeout When 0 Then IsNull(@DomainTimeout, [DomainTimeout]) When 1 Then @DomainTimeout End ,[ScriptEngineTimeout] = Case @ConsiderNull_ScriptEngineTimeout When 0 Then IsNull(@ScriptEngineTimeout, [ScriptEngineTimeout]) When 1 Then @ScriptEngineTimeout End ,[MaxScriptEngines] = Case @ConsiderNull_MaxScriptEngines When 0 Then IsNull(@MaxScriptEngines, [MaxScriptEngines]) When 1 Then @MaxScriptEngines End ,[TargetMachine] = Case @ConsiderNull_TargetMachine When 0 Then IsNull(@TargetMachine, [TargetMachine]) When 1 Then @TargetMachine End ,[ApplyStoreSacl] = Case @ConsiderNull_ApplyStoreSacl When 0 Then IsNull(@ApplyStoreSacl, [ApplyStoreSacl]) When 1 Then @ApplyStoreSacl End ,[GenerateAudits] = Case @ConsiderNull_GenerateAudits When 0 Then IsNull(@GenerateAudits, [GenerateAudits]) When 1 Then @GenerateAudits End ,[MajorVersion] = Case @ConsiderNull_MajorVersion When 0 Then IsNull(@MajorVersion, [MajorVersion]) When 1 Then @MajorVersion End ,[MinorVersion] = Case @ConsiderNull_MinorVersion When 0 Then IsNull(@MinorVersion, [MinorVersion]) When 1 Then @MinorVersion End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectName=store.Name, @ObjectGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 0, -- 0 for store @ObjectName, @ObjectGuid, N'The shallow properties of the store may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzScope] -- Update an existing record in [AzMan_AzScope] table ( @Return [int] output , @ID [int] , @AppId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @NameHash [Binary] (32) = Null , @Description [nvarchar](1024) = Null , @Name [ntext] = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier DECLARE @iScopeNameLen int Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End -- Only store or app admin can modify property of the scope object if ( (@AccessAtObjType <> 0) and (@AccessAtObjType <> 1) ) begin Set @Return = -5 goto Done end Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 if @Name Is NOT NULL Begin Exec AzMan_SP_Check_Dup_Scope @Return output, @AppId, @ID, @NameHash End if @Return = 0 Begin set @iScopeNameLen = DATALENGTH(@Name) Update [dbo].[AzMan_AzScope] Set [Name] = IsNull(@Name, [Name]) ,[NameHash] = IsNull(@NameHash, [NameHash]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End IF @SaclIsOn = 1 BEGIN -- get info for auditing SELECT @ObjectGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ID -- TODO Should we truncate the name for scopes? -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 4, -- 0 for scope @Name, @ObjectGuid, N'The shallow properties of the scope may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzOperation] -- Update an existing record in [AzMan_AzOperation] table ( @Return [int] output , @ID [int] , @AppId [int] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = 0 , @OperationID [int] = Null , @ConsiderNull_OperationID bit = 0 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 If @ConsiderNull_OperationID Is Null Set @ConsiderNull_OperationID = 0 If @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_Operation @Return output, @AppId, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzOperation] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End ,[OperationID] = Case @ConsiderNull_OperationID When 0 Then IsNull(@OperationID, [OperationID]) When 1 Then @OperationID End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = op.ObjectGuid FROM [dbo].[AzMan_AzOperation] op WHERE op.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 2, -- 2 for operation @Name, @ObjectGuid, N'The shallow properties of the operation may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzApplicationGroup] -- Update an existing record in [AzMan_AzApplicationGroup] table ( @Return [int] output , @ID [int] , @ParentType [tinyint] , @ParentID [int] , @GroupType [tinyint] = Null , @ConsiderNull_GroupType bit = 0 , @ConsiderNull_GroupDescription bit = 0 , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null ) As DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End If @ConsiderNull_GroupType Is Null Set @ConsiderNull_GroupType = 0 if @Name IS NOT NULL Begin Exec AzMan_SP_Check_Dup_Group @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzApplicationGroup] Set [Name] = IsNull(@Name, [Name]) ,[GroupType] = Case @ConsiderNull_GroupType When 0 Then IsNull(@GroupType, [GroupType]) When 1 Then @GroupType End ,[Description] = Case @ConsiderNull_GroupDescription When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 5, -- 5 for application group @Name, @ObjectGuid, N'The shallow properties of the application group may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzTask] -- Update an existing record in table ( @Return [int] output , @ID [int] , @ParentID [int] , @ParentType [tinyint] , @ConsiderNull_Description bit = 0 , @IsRoleDefinition [bit] = Null , @ConsiderNull_IsRoleDefinition bit = NULL , @ConsiderNull_ApplicationData bit = NULL , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As DECLARE @ObjectGuid uniqueidentifier Set NoCount On DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 if @ConsiderNull_IsRoleDefinition is NULL Set @ConsiderNull_IsRoleDefinition = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 if @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_Task @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzTask] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[IsRoleDefinition] = Case @ConsiderNull_IsRoleDefinition When 0 Then IsNull(@IsRoleDefinition, [IsRoleDefinition]) When 1 Then @IsRoleDefinition End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 3, -- 3 for task @Name, @ObjectGuid, N'The shallow properties of the task may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPU_AzRoleAssignment] -- Update an existing record in the table ( @Return [int] output , @ID [int] , @ParentID [int] , @ParentType [tinyint] , @ConsiderNull_Description bit = 0 , @ConsiderNull_ApplicationData bit = NULL , @Name [nvarchar](64) = Null , @Description [nvarchar](1024) = Null , @ApplicationData [ntext] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @ObjectGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 If @ConsiderNull_Description Is Null Set @ConsiderNull_Description = 0 If @ConsiderNull_ApplicationData Is Null Set @ConsiderNull_ApplicationData = 0 IF @Name Is Not NULL Begin Exec AzMan_SP_Check_Dup_RoleAssignment @Return output, @ParentID, @ParentType, @ID, @Name End if @Return = 0 Begin Update [dbo].[AzMan_AzRoleAssignment] Set [Name] = IsNull(@Name, [Name]) ,[Description] = Case @ConsiderNull_Description When 0 Then IsNull(@Description, [Description]) When 1 Then @Description End ,[ApplicationData] = Case @ConsiderNull_ApplicationData When 0 Then IsNull(@ApplicationData, [ApplicationData]) When 1 Then @ApplicationData End Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ObjectGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @ID -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 6, -- 6 for role @Name, @ObjectGuid, N'The shallow properties of the role assignment may have been modified' END Done: Set NoCount Off Return(@Return) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPIU_AzApplicationGroup_LDAPQuery' and type = 'P') DROP PROCEDURE AzMan_SPIU_AzApplicationGroup_LDAPQuery GO Create Procedure [AzMan_SPIU_AzApplicationGroup_LDAPQuery] -- Inserts or updates a record in [AzMan_LDAPQuery] table ( @Return [int] output , @GroupId [int] = Null -- ID Of Application Group , @ConsiderNull_LdapQuery bit = 0 , @LdapQuery [ntext] = Null -- LDAP Query ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @Name nvarchar(512) DECLARE @ID [int] DECLARE @ObjectGuid uniqueidentifier Declare @ExistingLdapQueryID [int] Declare @AccessAtObjType [tinyint] Set @ExistingLdapQueryID = Null DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 Select @ExistingLdapQueryID = [LdapQueryID] From [dbo].[AzMan_AzApplicationGroup] Where [ID] = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error=0 Begin if @RowCount = 0 Begin -- Parent Group was not found Set @Return = 1 Return(1) End End else Begin Return @Error End If @ExistingLdapQueryID Is Null Begin Begin Insert Into [dbo].[AzMan_LDAPQuery] ( [GroupID] , [LdapQuery] ) Values ( @GroupId , @LdapQuery ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ID = Cast(SCOPE_IDENTITY() As [int]) -- Update the AzApplication Groups with the new ID if @ID <> 0 Begin Update [dbo].[AzMan_AzApplicationGroup] Set [LdapQueryID] = @ID where [ID] = @GroupId End End Else Begin Set @Return = @Error End End End Else Begin If @ConsiderNull_LdapQuery Is Null Set @ConsiderNull_LdapQuery = 0 Update [dbo].[AzMan_LDAPQuery] Set [GroupID] = @GroupId ,[LdapQuery] = Case @ConsiderNull_LdapQuery When 0 Then IsNull(@LdapQuery, [LdapQuery]) When 1 Then @LdapQuery End Where [ID] = @ExistingLdapQueryID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount <> 1 Set @ID = @ExistingLdapQueryID else Begin Set @Return = @Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @Name=appGroup.Name, @ObjectGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit EXEC [AzMan_SP_GenerateGenericAudit] @Return, 5, -- 5 for group @Name, @ObjectGuid, N'The LDAP query of the application may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPIU_Bizrule] ( @Return [int] output, @ParentId [int] , @ParentType [tinyint] , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @ConsiderNull_BizRuleImportedPath bit = 0 , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column , @ConsiderNull_BizRule bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @ConsiderNull_BizRuleLanguage bit = 0 ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set @Return = 0 Set NoCount On Declare @ExistingBizruleID [int] Declare @AccessAtObjType [tinyint] Set @ExistingBizruleID = Null Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentId, @ParentType, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 if @ParentType = 3 -- task Begin Select @ExistingBizruleID = [BizRuleID] From [dbo].[AzMan_BizRule_To_Task] Where [TaskID] = @ParentId End else if @ParentType = 5 -- group Begin Select @ExistingBizruleID = [BizRuleID] From [dbo].[AzMan_BizRule_To_Group] Where [GroupID] = @ParentId End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @ExistingBizruleID Is Null or @ExistingBizruleID = 0 Begin Begin Insert Into [dbo].[AzMan_BizRule] ( [ParentId] , [ParentType] , [BizRuleImportedPath] , [BizRule] , [BizRuleLanguage] ) Values ( @ParentId ,@ParentType ,@BizRuleImportedPath ,@BizRule ,@BizRuleLanguage ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 1 Begin Set @ExistingBizruleID = Cast(SCOPE_IDENTITY() As [int]) -- Update the AzApplication Groups or Task with the new ID if @ExistingBizruleID <> 0 if @ParentType = 3 -- task Begin insert [dbo].[AzMan_BizRule_To_Task] ( [TaskID] , [BizRuleID] ) Values ( @ParentId , @ExistingBizruleID ) End else if @ParentType = 5 -- group Begin insert [dbo].[AzMan_BizRule_To_Group] ( [GroupID] , [BizRuleID] ) Values ( @ParentId , @ExistingBizruleID ) End End Else Begin Set @Return = @Error End End End Else Begin If @ConsiderNull_BizRuleImportedPath Is Null set @ConsiderNull_BizRuleImportedPath = 0 If @ConsiderNull_BizRule Is Null set @ConsiderNull_BizRule = 0 If @ConsiderNull_BizRuleLanguage Is Null set @ConsiderNull_BizRuleLanguage = 0 Update [dbo].[AzMan_BizRule] Set [ParentId] = @ParentId , [ParentType] = @ParentType , [BizRuleImportedPath] = Case @ConsiderNull_BizRuleImportedPath When 0 Then IsNull(@BizRuleImportedPath, [BizRuleImportedPath]) When 1 Then @BizRuleImportedPath End , [BizRule] = Case @ConsiderNull_BizRule When 0 Then IsNull(@BizRule, [BizRule]) When 1 Then @BizRule End , [BizRuleLanguage] = Case @ConsiderNull_BizRuleLanguage When 0 Then IsNull(@BizRuleLanguage, [BizRuleLanguage]) When 1 Then @BizRuleLanguage End Where [ID] = @ExistingBizruleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @RowCount = 0 Begin if @Error = 0 Begin Set @Return = -1168 -- Error updating the Record End Else Begin Set @Return = @Error End End End -- generate an audit IF @SaclIsOn = 1 BEGIN -- get info for auditing IF @ParentType = 3 -- task BEGIN SELECT @parentName=task.Name, @parentGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ParentId END ELSE IF @ParentType = 5 -- app group BEGIN SELECT @parentName=appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ParentId END EXEC [AzMan_SP_GenerateGenericAudit] @Return, @ParentType, @parentName, @parentGuid, N'The bizrule of the object may have been modified' END Done: Set NoCount Off Return(@Return) GO Create Procedure dbo.[AzMan_SPIU_AzApplicationGroup_Bizrule] ( @Return [int] output , @GroupId [int] , @ConsiderNull_BizRuleImportedPath bit = 0 , @ConsiderNull_BizRule bit = 0 , @ConsiderNull_BizRuleLanguage bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column ) As Set @Return = 0 exec AzMan_SPIU_Bizrule @Return output, @GroupId, 5 , @BizRuleImportedPath , @ConsiderNull_BizRuleImportedPath , @BizRule , @ConsiderNull_BizRule , @BizRuleLanguage , @ConsiderNull_BizRuleLanguage Return @Return Go Create Procedure dbo.[AzMan_SPIU_AzTask_Bizrule] ( @Return [int] output , @TaskId [int] , @ConsiderNull_BizRuleImportedPath bit = 0 , @ConsiderNull_BizRule bit = 0 , @ConsiderNull_BizRuleLanguage bit = 0 , @BizRuleLanguage [nvarchar](64) = Null -- for [AzMan_BizRule].[BizRuleLanguage] column , @BizRuleImportedPath [nvarchar](512) = Null -- for [AzMan_BizRule].[BizRuleImportedPath] column , @BizRule [ntext] = Null -- for [AzMan_BizRule].[BizRule] column ) As Set @Return = 0 exec AzMan_SPIU_Bizrule @Return output, @TaskId, 3 , @BizRuleImportedPath , @ConsiderNull_BizRuleImportedPath , @BizRule , @ConsiderNull_BizRule , @BizRuleLanguage , @ConsiderNull_BizRuleLanguage Return @Return Go Create Procedure [AzMan_SPI_AzApplicationGroup_Single_SidMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 0 , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Group_SIDMember] (MemberSID, Member, GroupID) VALUES (@SidMember, @IsMember, @GroupId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit IF @IsMember = 1 EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info ELSE EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 0, -- 0 for non-member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplicationGroup_Single_SidMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 1 , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Group_SIDMember] where MemberSID = @SidMember and Member = @IsMember and GroupID = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --REcord not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = appGroup.Name, @parentGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId -- generate an audit IF @IsMember = 1 EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info ELSE EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 5, -- 5 for group @parentName, @parentGuid, N'', @SidMember, 0, -- 0 for non-member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @IsMember [bit] = 1 , @SidMembers varbinary (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- SidMembers are aggregated binary data in the following format: -- The first 4 bytes is a delete/add flag (0/1); the following 4 bytes is the size of the SID, -- followed by the actual SID. The over-usage of these pieces of data is for ease of parsing -- Using string to represent such encoding, the following example which encodes 3 SIDs -- of length 24, 36, and 48 in turn, and the second one is a delete -- 00010024NNNNNNNNN00000036NNNNNNNNNN00010048NNNNNNNNNNNNNN -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @DataLength int DECLARE @SidLength int DECLARE @SidMember varbinary(85) DECLARE @Pos int DECLARE @isAdd int SET @DataLength = DATALENGTH(@SidMembers) Set @Return = 0 Set @Pos = 1 WHILE @DataLength - @Pos > 8 BEGIN SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 -- make sure that we the SidLength is not lying to us! IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1 BEGIN SET @SidMember = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) AS varbinary) SET @Pos = @Pos + @SidLength -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember, @SidMember, @SaclIsOn IF @Return <> 0 Break End ELSE BEGIN Exec AzMan_SPD_AzApplicationGroup_Single_SidMember @Return output, @GroupId, @IsMember ,@SidMember, @SaclIsOn IF @Return <> 0 Break End END ELSE SET @Pos = @DataLength END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_SidMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SidMembers varbinary (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 1 , @SidMembers Return(@Return) go Create Procedure AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SidMembers varbinary (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_SidMembers_Internal @Return output, @GroupId, 0 , @SidMembers Return(@Return) go Create Procedure [AzMan_SPI_AzApplicationGroup_Single_AppMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @ChildID [int] , @IsMember [bit] = 1 , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @groupName nvarchar(512) DECLARE @groupGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Group_AppMember] (ChildID, Member, GroupID) VALUES (@ChildID, @IsMember, @GroupId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 --Generic Error End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 5, -- 5 for application group @groupName, @groupGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return @Return GO Create Procedure [AzMan_SPD_AzApplicationGroup_Single_AppMember] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @ChildID [int] , @IsMember [bit] = 1 , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @groupName nvarchar(512) DECLARE @groupGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Group_AppMember] where ChildID = @ChildID and Member = @IsMember and GroupID = @GroupId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @groupName = appGroup.Name, @groupGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @GroupId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 5, -- 5 for application group @groupName, @groupGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal] ( @Return [int] output, @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @IsMember [bit] = 1 , @AppMemberIDs [nvarchar] (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- First parse the SidMembers string -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupId, 5, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @AppMember varchar(100), @Pos int DECLARE @iAppMemberID int DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' Set @Return = 0 SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) IF REPLACE(@AppMemberIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @iAppMemberID = CAST(@AppMember as int) -- remove the left part (the id) SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iAppMemberID > 0 BEGIN -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn if @Return <> 0 Begin Break End End else BEGIN Exec AzMan_SPD_AzApplicationGroup_Single_AppMember @Return output, @GroupId, @iAppMemberID , @IsMember, @SaclIsOn if @Return <> 0 Begin Break End End END SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 1 , @AppMemberIDs Return(@Return) go Create Procedure [AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers] ( @Return [int] output , @GroupId [int] -- ID Of Application Group , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Exec AzMan_SPI_AzApplicationGroup_Multi_AppMembers_Internal @Return output, @GroupId, @SepChar, 0 , @AppMemberIDs Return(@Return) go Create Procedure [AzMan_SPI_AzRoleAssignment_Single_SidMember] ( @Return [int] output, @RoleId [int] -- ID Of Role , @SidMember varbinary (85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_SIDMember] (MemberSID, RoleID) VALUES (@SidMember,@RoleId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount = 0 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 -- General Error End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleId -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 4, -- 4 for SE_AUDITID_AZ_SQL_MEMBER_ASSIGN 6, -- 6 for role @roleName, @roleGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_SidMember] ( @Return [int] output, @RoleId [int] -- ID Of RoleAssignment , @SidMember varbinary(85) , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @userName nvarchar(512) Set NoCount On Set @Return = 0 Delete From [AzMan_Role_SIDMember] where MemberSID = @SidMember and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get the info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = Role.Name, @roleGuid = Role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] Role WHERE Role.ID = @RoleId -- We can't lookup names from SID, but XP can do that SET @userName = '' -- generate an audit EXEC [AzMan_SP_GenerateMemberAudit] @Return, 5, -- 5 for SE_AUDITID_AZ_SQL_MEMBER_REMOVE 6, -- 6 for role @roleName, @roleGuid, N'', @SidMember, 1, -- 1 for member N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_SidMembers] ( @Return [int] output , @RoleId [int] -- ID Of Role Assignment , @SidMembers varbinary (4000) ) As DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Set NoCount On -- First parse the SidMembers string -- Insert each one of them Declare @AccessAtObjType [tinyint] Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End DECLARE @DataLength int DECLARE @SidLength int DECLARE @Sid varbinary(85) DECLARE @Pos int DECLARE @isAdd int SET @DataLength = DATALENGTH(@SidMembers) Set @Return = 0 Set @Pos = 1 WHILE @DataLength - @Pos > 8 BEGIN SET @isAdd = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 SET @SidLength = CAST(SUBSTRING(@SidMembers, @Pos, 1) AS int) SET @Pos = @Pos + 1 -- make sure that we the SidLength is not lying to us! IF @SidLength >= 12 AND @SidLength < 85 AND @DataLength - @Pos >= @SidLength - 1 BEGIN SET @Sid = CAST(SUBSTRING(@SidMembers, @Pos, @SidLength) as varbinary) SET @Pos = @Pos + @SidLength -- if NNNN=0, then it means to delete IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn IF @Return <> 0 Break End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_SidMember @Return output, @RoleId, @Sid, @SaclIsOn IF @Return <> 0 Break End END ELSE BEGIN SET @Pos = @DataLength END END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Single_AppMember] ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On INSERT INTO [AzMan_Role_AppMember] (ChildID, RoleID) VALUES (@ChildID, @RoleId) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1 End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 2, -- 2 for SE_AUDITID_AZ_SQL_REFERENCE_ASSIGN 6, -- 6 for role @roleName, @roleGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment_Single_AppMember] ( @Return [int] output, @RoleId [int] -- ID Of Role Assignment , @ChildID [int] , @SaclIsOn [bit] ) As DECLARE @RowCount INT, @Error INT DECLARE @roleName nvarchar(512) DECLARE @roleGuid uniqueidentifier DECLARE @refGroupName nvarchar(512) DECLARE @refGroupGuid uniqueidentifier Set @Return = 0 Set NoCount On Delete From [AzMan_Role_AppMember] where ChildID = @ChildID and RoleID = @RoleId SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @roleName = role.Name, @roleGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @RoleId SELECT @refGroupName = refGroup.Name, @refGroupGuid = refGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] refGroup WHERE refGroup.ID = @ChildID -- generate an audit EXEC [AzMan_SP_GenerateObjectAudit] @Return, 3, -- 3 for SE_AUDITID_AZ_SQL_REFERENCE_REMOVE 6, -- 6 for role @roleName, @roleGuid, 5, -- 5 for application group @refGroupName, @refGroupGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPI_AzRoleAssignment_Multi_AppMembers] ( @Return [int] output , @RoleId [int] -- ID Of Role Assignment , @SepChar [char] (1) = "|" , @AppMemberIDs [nvarchar] (4000) ) As Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleId, 6, 1, @SaclIsOn output -- Require Admin Access if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 DECLARE @equal char DECLARE @addOrDelete nvarchar(10) DECLARE @isAdd int SET @equal = '=' Set NoCount On -- First parse the SidMembers string -- Insert each one of them DECLARE @AppMember varchar(100), @Pos int DECLARE @iAppMemberID int SET @AppMemberIDs = LTRIM(RTRIM(@AppMemberIDs))+ @SepChar SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) IF REPLACE(@AppMemberIDs, @SepChar, '') <> '' BEGIN WHILE @Pos > 0 BEGIN SET @AppMember = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @iAppMemberID = CAST(@AppMember as int) -- remove the left part (the id) SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) -- now move to the pipe separator SET @Pos = CHARINDEX(@SepChar, @AppMemberIDs, 1) SET @addOrDelete = LTRIM(RTRIM(LEFT(@AppMemberIDs, @Pos - 1))) Set @isAdd = CAST(@addOrDelete as int) IF @iAppMemberID > 0 BEGIN IF @isAdd <> 0 BEGIN Exec AzMan_SPI_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn if @Return <> 0 Begin Break End End ELSE BEGIN Exec AzMan_SPD_AzRoleAssignment_Single_AppMember @Return output, @RoleId, @iAppMemberID, @SaclIsOn if @Return <> 0 Begin Break End End END SET @AppMemberIDs = RIGHT(@AppMemberIDs, LEN(@AppMemberIDs) - @Pos) SET @Pos = CHARINDEX(@equal, @AppMemberIDs, 1) END END Done: Set NoCount Off Return(@Return) GO Create Procedure [spDrop_AzMan_Table] as drop table [AzMan_Role_To_Operation_Link] drop table [AzMan_Role_To_Task_Link] drop table [AzMan_Task_To_Task_Link] drop table [AzMan_Task_To_Operation_Link] drop table [AzMan_AzTask] drop table [AzMan_AzOperation] drop table [AzMan_LDAPQuery] drop table [AzMan_BizRule] drop table [AzMan_Group_SIDMember] drop table [AzMan_Group_AppMember] drop table [AzMan_AzApplicationGroup] drop table [AzMan_Role_SIDMember] drop table [AzMan_Role_AppMember] drop table [AzMan_AzRoleAssignment] drop table [AzMan_AzScope_Name] drop table [AzMan_AzScope] drop table [AzMan_AzApplication] drop table [AzMan_AzAuthorizationStore] Return(0) GO ----------------------------Select queries---------------------------------------------- Create Procedure [AzMan_SPS_Get_AzAuthorizationStoreByName] -- Retrieve specific records from the [AzMan_AzAuthorizationStore] table depending on the input parameters you supply. ( @Return [int] output, @Name [nvarchar] (512) ) as Begin DECLARE @RowCount INT, @Error INT DEclare @ID INT select @ID=ID from [AzMan_AzAuthorizationStore] where Name = @Name SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 0, @SaclIsOn output if @Return >= 1 Begin Select [ID] ,[DomainTimeout] ,[ScriptEngineTimeout] ,[MaxScriptEngines] ,[ApplyStoreSacl] ,[GenerateAudits] ,[MajorVersion] ,[MinorVersion] ,[ObjectGuid] ,[TargetMachine] ,[Description] ,[ApplicationData] --,[ChildUpdateTimeStamp] From [AzMan_AzAuthorizationStore] where Name = @Name SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplications] ( @Return [int] output, @StoreID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@StoreID, 0, 0, @SaclIsOn output if @Return <= 0 goto Done Else if @Return = 1 or @Return = 2 Begin Select [ID], [ObjectGuid] , IsNull([ApplyStoreSacl], 0), IsNull([GenerateAudits], 0), IsNull([AuthzInterfaceClsId], 0), IsNull([ApplicationVersion], N''), [Name], IsNull([Description], N''), [ApplicationData] --[ChildUpdateTimeStamp] From [AzMan_AzApplication] where StoreID = @StoreID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End Else if @Return = 3 -- Delegated user Begin -- Get all the child app where the current user has access Select [ID], [ObjectGuid] , [ApplyStoreSacl], [GenerateAudits], [AuthzInterfaceClsId], [ApplicationVersion], [Name], [Description], [ApplicationData] --[ChildUpdateTimeStamp] From [AzMan_AzApplication] where StoreID = @StoreID and ID in ( select ObjectID from [dbo].[Azman_SQLRole] where [dbo].[Azman_SQLRole].[ObjectType] = 1 and is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplication] ( @Return [int] output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 0, @SaclIsOn output if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [StoreID], [ApplyStoreSacl], [GenerateAudits], [AuthzInterfaceClsId], [ObjectGuid], [ApplicationVersion], [Name], [Description], [ApplicationData] From [AzMan_AzApplication] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzScope] ( @Return [int] output, @AppID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the App level Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output if @Return <= 0 goto Done Else if @Return = 1 or @Return = 2 Begin Select [ID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where AppID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End end Else if @Return = 3 -- Delegated user Begin Select [ID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where AppID = @AppID and ID in ( select ObjectID from [dbo].[Azman_SQLRole] where [dbo].[Azman_SQLRole].[ObjectType] = 4 and is_member([dbo].[Azman_SQLRole].[SQLRoleName]) = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated uset at the parent -- So he can see the groups Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 0 Begin Select [ID], [GroupType] , [ObjectGuid] , [Name] , ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (StoreID = @ParentID ) and ParentType = @ParentType End else if @ParentType = 1 Begin Select [ID], [GroupType], [ObjectGuid], [Name], ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (AppID = @ParentID ) and ParentType = @ParentType End else if @ParentType = 4 Begin Select [ID], [GroupType], [ObjectGuid], [Name], ISNULL ( [Description] , N'' ) From [AzMan_AzApplicationGroup] where (ScopeID = @ParentID ) and ParentType = @ParentType End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated uset at the parent -- So he can see the Task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 1 Begin Select [ID], [IsRoleDefinition], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzTask] where AppID = @ParentID End else if @ParentType = 4 Begin Select [ID], [IsRoleDefinition], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzTask] where ScopeID = @ParentID End else Begin Set @Return = -1 goto Done End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask_Operations] ( @Return int output, @TaskID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Task Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated user at the parent -- So he can see the task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Task_To_Operation_Link] INNER JOIN AzMan_AzOperation ON [AzMan_Task_To_Operation_Link].[OperationID] = AzMan_AzOperation.ID where TaskID = @TaskID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzTask_Tasks] ( @Return int output, @TaskID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Task Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@TaskID, 3, 0, @SaclIsOn output if @Return <= 0 goto Done -- The user either has admin, reader or delegated user at the parent -- So he can see the task Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Task_To_Task_Link] INNER JOIN AzMan_AzTask ON [AzMan_Task_To_Task_Link].[ChildID] = AzMan_AzTask.ID where [AzMan_Task_To_Task_Link].[TaskID] = @TaskID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Tasks] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Role Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated uset at the parent -- So he can see the Role Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Role_To_Task_Link] INNER JOIN AzMan_AzTask ON [TaskID] = AzMan_AzTask.ID where [RoleID] = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return (@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_Operations] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Role Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the role Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From [AzMan_Role_To_Operation_Link] INNER JOIN AzMan_AzOperation ON [AzMan_Role_To_Operation_Link].OperationID = AzMan_AzOperation.ID where [RoleID] = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment] ( @Return int output, @ParentID int ,@ParentType tinyint ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the parent Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ParentID, @ParentType, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End Else if @Return = 1 or @Return = 2 or @Return = 3 Begin if @ParentType = 1 Begin Select [ID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where AppID = @ParentID and ParentType = @ParentType End else if @ParentType = 4 Begin Select [ID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where ScopeID = @ParentID and ParentType = @ParentType End else Begin Set @Return = -1 goto Done End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure AzMan_SPS_Get_AzApplicationGroup ( @Return int output, @ID int ) as DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End Else if @Return = 1 or @Return = 2 or @Return = 3 BEGIN Begin Select [GroupType], [ObjectGuid] , [Name], IsNull([Description], N'') From [AzMan_AzApplicationGroup] where [ID] = @ID End SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Set @Return = @Error else Set @Return = 0 END Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplicationGroup_BizruleInfo] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [BizRuleLanguage], [BizRuleImportedPath] , [BizRule] From [AzMan_BizRule] where ParentId = @ID and ParentType = 5 and ID in ( Select [BizRuleID] From [AzMan_BizRule_To_Group] where [GroupID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzTask_BizruleInfo] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Set @Return = 0 Select [BizRuleLanguage], [BizRuleImportedPath] , [BizRule] From [AzMan_BizRule] where ParentId = @ID and ParentType = 3 and ID in ( Select [BizRuleID] From [AzMan_BizRule_To_Task] where [TaskID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzApplicationGroup_LDAPQuery] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Set @Return = 0 Select [LdapQuery] From [AzMan_LDAPQuery] where GroupID = @GroupID and ID in ( Select [LdapQueryID] From [AzMan_AzApplicationGroup] where ID = @GroupID ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Group_SIDMember] where GroupID = @GroupID and [Member] = 1 SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Group_SIDMember] where GroupID = @GroupID and [Member] = 0 SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 1 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers] ( @Return int output, @GroupID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@GroupID, 5, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Group -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID in ( Select ChildID from AzMan_Group_AppMember where GroupID = @GroupID and [Member] = 0 ) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_SIDMembers] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Role -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [MemberSID] From [AzMan_Role_SIDMember] where RoleID = @RoleID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzRoleAssignment_AppMembers] ( @Return int output, @RoleID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@RoleID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the Role -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] From AzMan_AzApplicationGroup where ID IN ( select ChildID from [AzMan_Role_AppMember] where RoleID = @RoleID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) go Create Procedure [AzMan_SPS_Get_AzScope] ( @Return int output, @ScopeID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ScopeID, 4, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the App -- So he can see this object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [AppID], [NameLen], IsNull([HasSpecificUsers], 0) AS HasSpecificUsers, [NameHash], [ObjectGuid] , [Description], [Name], [ApplicationData] From [AzMan_AzScope] where ID = @ScopeID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Enum_AzOperation] ( @Return int output, @AppID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at the Application Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@AppID, 1, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the App -- So he can see the operations Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ID], [OperationID], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzOperation] where AppID = @AppID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = 0 End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzOperation] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the operation Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [OperationID], [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzOperation] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return (@Return) GO Create Procedure [AzMan_SPS_Get_AzTask] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [IsRoleDefinition], [ObjectGuid] , [Name], [Description], [ApplicationData] From [AzMan_AzTask] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return(@Return) GO Create Procedure [AzMan_SPS_Get_AzRoleAssignment] ( @Return int output, @ID int ) as Begin DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- we don't care about SACL (0 for the second last parameter) -- Check access at object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 0, @SaclIsOn output if @Return <= 0 Begin goto Done End -- The user either has admin, reader or delegated user at the parent -- So he can see the object Else if @Return = 1 or @Return = 2 or @Return = 3 Begin Select [ObjectGuid] , [Name] , [Description], [ApplicationData] From [AzMan_AzRoleAssignment] where ID = @ID SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT if @Error <> 0 Begin Set @Return = @Error End else Begin If @RowCount = 0 Begin Set @Return = -1168 --Record not found End End End End Done: Return (@Return) GO -- Delete Queries Create Procedure [AzMan_SPD_AzOperation] -- Delete a specific record from table [AzMan_AzOperation] ( @Return int output, @ID [int] ,@AppId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 2, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App WHERE App.ID = @AppId SELECT @childName = Op.Name, @childGuid = Op.ObjectGuid FROM [dbo].[AzMan_AzOperation] Op WHERE Op.ID = @ID END Delete From [dbo].[AzMan_AzOperation] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@AppId Is Null) Or ([AppID] = @AppId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 1, -- 1 for application @parentName, @parentGuid, 2, -- 2 for Operation @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzScope] -- Delete a specific record from table [AzMan_AzScope] ( @Return int output, @ID [int] ,@AppId [int] = Null ) As DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Set NoCount On DECLARE @RowCount INT, @Error INT Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 4, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = App.Name, @parentGuid = App.ObjectGuid FROM [dbo].[AzMan_AzApplication] App WHERE App.ID = @AppId SELECT @childName = scope.Name, @childGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ID END Delete From [dbo].[AzMan_AzScope] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@AppId Is Null) Or ([AppID] = @AppId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 1, -- 1 for application @parentName, @parentGuid, 4, -- 4 for scope @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplication] -- Delete a specific record from table [AzMan_AzApplication] ( @Return int output, @ID [int] -- for [AzMan_AzApplication].[ID] column ,@StoreId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 1, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @StoreId SELECT @childName = app.Name, @childGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ID END Delete From [dbo].[AzMan_AzApplication] Where ((@ID Is Null) Or ([ID] = @ID)) And ((@StoreId Is Null) Or ([StoreID] = @StoreId)) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 0, -- 0 for store @parentName, @parentGuid, 1, -- 1 for application @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzAuthorizationStore] -- Delete a specific record from table [AzMan_AzAuthorizationStore] ( @Return int output, @ID [int] ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 0, 1, @SaclIsOn output -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ID END if @Return <> 1 Begin if (@Return >= 2) Set @Return = -5 End ELSE Begin Set @Return = 0 Delete From [dbo].[AzMan_AzAuthorizationStore] Where ((@ID Is Null) Or ([ID] = @ID)) End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE 0, -- 0 for store @parentName, @parentGuid, 0, -- 0 for store @parentName, @parentGuid, N'' -- no other info END Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzApplicationGroup] -- Delete a specific record from table [AzMan_AzApplicationGroup] ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 5, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = appGroup.ParentType, @childName = appGroup.Name, @childGuid = appGroup.ObjectGuid FROM [dbo].[AzMan_AzApplicationGroup] appGroup WHERE appGroup.ID = @ID IF @ParentType = 0 -- store SELECT @parentName = store.Name, @parentGuid = store.ObjectGuid FROM [dbo].[AzMan_AzAuthorizationStore] store WHERE store.ID = @ParentId ELSE IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzApplicationGroup] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 5, -- 5 for group @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzTask] -- Delete a specific record from table [AzMan_AzTask] ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 3, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = task.ParentType, @childName = task.Name, @childGuid = task.ObjectGuid FROM [dbo].[AzMan_AzTask] task WHERE task.ID = @ID IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzTask] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 3, -- 3 for task @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO Create Procedure [AzMan_SPD_AzRoleAssignment] -- Delete a specific record from table ( @Return int output, @ID [int] ,@ParentId [int] = Null ) As Set NoCount On DECLARE @RowCount INT, @Error INT DECLARE @parentName nvarchar(512) DECLARE @parentGuid uniqueidentifier DECLARE @childName nvarchar(512) DECLARE @childGuid uniqueidentifier DECLARE @ParentType tinyint Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 -- Check access at this object Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, 6, 1, @SaclIsOn output if @Return <> 1 Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End Set @Return = 0 -- get info for auditing IF @SaclIsOn = 1 BEGIN SELECT @ParentType = role.ParentType, @childName = role.Name, @childGuid = role.ObjectGuid FROM [dbo].[AzMan_AzRoleAssignment] role WHERE role.ID = @ID IF @ParentType = 1 -- app SELECT @parentName = app.Name, @parentGuid = app.ObjectGuid FROM [dbo].[AzMan_AzApplication] app WHERE app.ID = @ParentId ELSE IF @ParentType = 4 -- scope SELECT @parentName = scope.Name, @parentGuid = scope.ObjectGuid FROM [dbo].[AzMan_AzScope] scope WHERE scope.ID = @ParentId END Delete From [dbo].[AzMan_AzRoleAssignment] Where ([ID] = @ID) SELECT @Error = @@ERROR, @RowCount = @@ROWCOUNT If @RowCount <> 1 Begin if @Error <> 0 Begin Set @Return = @Error End else Begin Set @Return = -1168 --Record not found End End -- generate an audit IF @SaclIsOn = 1 BEGIN EXEC [AzMan_SP_GenerateObjectAudit] @Return, 1, -- 1 for SE_AUDITID_AZ_SQL_OBJECT_DELETE @ParentType, @parentName, @parentGuid, 6, -- 6 for role @childName, @childGuid, N'' -- no other info END Done: Set NoCount Off Return(@Return) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp GO -- query the timestamps of a store CREATE PROCEDURE AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp ( @ReturnCode int output, @storeID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzAuthorizationStore] WHERE [ID] = @storeID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzApplicationUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp GO -- query the timestamps of applications CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationUpdateTimeStamp ( @ReturnCode int output, @storeID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzApplication] WHERE [StoreID] = @storeID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzScopeUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp GO -- query the timestamps of scopes CREATE PROCEDURE AzMan_SPS_Enum_AzScopeUpdateTimeStamp ( @ReturnCode int output, @appID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0), IsNull([ChildUpdateTimeStamp], 0) FROM [AzMan_AzScope] WHERE [AppID] = @appID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp GO -- query the timestamps of application groups CREATE PROCEDURE AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 0) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [StoreID] = @parentID IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [AppID] = @parentID IF (@parentType = 4) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzApplicationGroup] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzOperationUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp GO -- query the timestamps of operations CREATE PROCEDURE AzMan_SPS_Enum_AzOperationUpdateTimeStamp ( @ReturnCode int output, @appID int ) AS SELECT @ReturnCode = 0 SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzOperation] WHERE [AppID] = @appID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp GO -- query the timestamps of roles CREATE PROCEDURE AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] WHERE [AppID] = @parentID ELSE SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzRoleAssignment] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Enum_AzTaskUpdateTimeStamp' and type = 'P') DROP PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp GO -- query the timestamps of tasks CREATE PROCEDURE AzMan_SPS_Enum_AzTaskUpdateTimeStamp ( @ReturnCode int output, @parentID int, @parentType tinyint ) AS SELECT @ReturnCode = 0 IF (@parentType = 1) SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] WHERE [AppID] = @parentID ELSE SELECT [ID], [ObjectGuid], IsNull([RowUpdateTimeStamp], 0) FROM [AzMan_AzTask] WHERE [ScopeID] = @parentID Return(@@RowCount) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_SQLRole' and type = 'P') DROP PROCEDURE AzMan_SPD_SQLRole GO CREATE PROCEDURE AzMan_SPD_SQLRole ( @Return [int] output, @SQLRoleName [nvarchar] (64) ) AS DECLARE @Ret [int] DECLARE @member [nvarchar] (64) DECLARE roleMember_cursor CURSOR FOR ( select u.name from sysusers u, sysusers g, sysmembers m where g.name = @SQLRoleName and g.uid = m.groupuid and g.issqlrole = 1 and u.uid = m.memberuid ) OPEN roleMember_cursor FETCH NEXT FROM roleMember_cursor INTO @member WHILE @@FETCH_STATUS = 0 BEGIN EXEC @Ret = sp_droprolemember @SQLRoleName, @member FETCH NEXT FROM roleMember_cursor INTO @member END Close roleMember_cursor DEALLOCATE roleMember_cursor Set @Return = -1 Exec @Ret = sp_droprole @SQLRoleName if @Ret <> 0 Begin Set @Return = -1 End Else Begin Set @Return = 0 End Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_All_SQLRole_ForObject' and type = 'P') DROP PROCEDURE AzMan_SPD_All_SQLRole_ForObject GO CREATE PROCEDURE AzMan_SPD_All_SQLRole_ForObject ( @Return [int] output, @ID [int], @ObjectType [tinyint] ) AS DECLARE @uid [int] DECLARE @SQLRoleName [nvarchar] (64) Set @Return = 0 SELECT @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 1 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End SELECT @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 2 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End set @uid = 0 Select @uid=[uid], @SQLRoleName = [SQLRoleName] From [dbo].[Azman_SQLRole] where [ObjectID] = @ID and [ObjectType] = @ObjectType and [RoleType] = 3 IF @uid <> 0 Begin Exec AzMan_SPD_SQLRole @Return output, @SQLRoleName End if @Return = 0 Begin DELETE Azman_SQLRole WHERE [ObjectID] = @ID AND [ObjectType] = @ObjectType Set @Return = 0 End Done: Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPD_SQLRole_ForObject' and type = 'P') DROP PROCEDURE AzMan_SPD_SQLRole_ForObject GO CREATE PROCEDURE AzMan_SPD_SQLRole_ForObject ( @Return [int] output, @ID [int], @ObjectType [tinyint], @DeleteFlag [int] -- bitwise pattern. 0x0001 for deleting only self, 0x0002 for deleting only children ) AS SET NOCOUNT ON DECLARE @SQLRoleName [nvarchar] (64) Declare @AccessAtObjType [tinyint] DECLARE @SaclIsOn [bit] Declare @DbName [nvarchar] (255) Set @SaclIsOn = 0 Set @Return = -1 -- such role deletion audit will be generated by the object deletion. -- so we don't care about SACL (second last parameter) here Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output if @Return <> 1 Begin -- if the object is deleted we will ignore as we still want to delete all the roles for the object if @Return = -1168 Begin Set @Return = 0 End Else Begin if (@Return >= 2) Begin Set @Return = -5 End goto Done End End -- our deletion flag will switch to delete all because we only need -- to make sure that the acting container object's roles are not deleted -- so that the user still has access -- if we are instructed to delete sub-container's roles if (@DeleteFlag & 2) <> 0 begin -- for applications or stores, we also need to delete the sub-container's roles DECLARE @locReturn int -- we have to press on for this action. No rollback IF @ObjectType = 0 BEGIN DECLARE @AppID int DECLARE app_cursor CURSOR FOR ( select App.ID FROM AzMan_AzApplication App WHERE App.StoreID = @ID ) OPEN app_cursor FETCH NEXT FROM app_cursor INTO @AppID WHILE @@FETCH_STATUS = 0 BEGIN -- now call recursively to delete the app's roles EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @AppID, 1, 3 FETCH NEXT FROM app_cursor INTO @AppID END Close app_cursor DEALLOCATE app_cursor END ELSE IF @ObjectType = 1 BEGIN DECLARE @ScopeID int DECLARE scope_cursor CURSOR FOR ( select Scope.ID FROM AzMan_AzScope Scope WHERE Scope.AppID = @ID ) OPEN scope_cursor FETCH NEXT FROM scope_cursor INTO @ScopeID WHILE @@FETCH_STATUS = 0 BEGIN -- now call recursively to delete the app's roles EXEC AzMan_SPD_SQLRole_ForObject @locReturn output, @ScopeID, 4, 3 FETCH NEXT FROM scope_cursor INTO @ScopeID END Close scope_cursor DEALLOCATE scope_cursor END end -- if we are instructed to delete the self roles if (@DeleteFlag & 1) <> 0 begin If Is_Member('db_owner') = 1 or Is_Member('db_securityadmin') = 1 Begin exec AzMan_SPD_All_SQLRole_ForObject @Return output , @ID, @ObjectType End else begin Set @DbName = db_name() Exec master.dbo.xp_AzManDeleteRole @Return output, @ID, @ObjectType, @DbName End end Done: SET NOCOUNT OFF Return @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SPS_Get_ObjectSecurityOption' and type = 'P') DROP PROCEDURE AzMan_SPS_Get_ObjectSecurityOption GO CREATE PROCEDURE AzMan_SPS_Get_ObjectSecurityOption ( @Return [int] output, @AccessAtObjType [tinyint] output, @ID [int], @ObjectType [tinyint], @UserType [int] output ) AS DECLARE @SaclIsOn [bit] Set @SaclIsOn = 0 SET @Return = -5 SET @UserType = 0 -- illegal users IF @ObjectType = 0 OR @ObjectType = 1 OR @ObjectType = 4 BEGIN -- no need to know that SACL (Second last parameter) Exec AzMan_SP_AccessCheck @Return output, @AccessAtObjType output,@ID, @ObjectType, 0, @SaclIsOn output IF @Return >= 1 AND @Return <= 3 BEGIN SET @UserType = @Return SET @Return = 0 END END RETURN @Return GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'AzMan_SP_Grant_Permission' and type = 'P') DROP PROCEDURE AzMan_SP_Grant_Permission GO CREATE PROCEDURE AzMan_SP_Grant_Permission AS grant execute on AzMan_SP_GetSQLRole to public grant execute on AzMan_SPI_SQLRole to public --AzMan_SPI_Add_User_To_SQLRole grant execute on AzMan_SPI_Add_User_To_Role to public --AzMan_SPD_User_From_SQLRole grant execute on AzMan_SPD_User_From_Role to public --AzMan_SP_Get_Object_Path_For_Container --AzMan_SP_Get_Object_Path --AzMan_SP_AccessCheck_For_Container --AzMan_SP_AccessCheck grant execute on AzMan_SPS_Get_StoreIDByName to public --AzMan_SP_Check_Dup_Task --AzMan_SP_Check_Dup_RoleAssignment --AzMan_SP_Check_Dup_Application --AzMan_SP_Check_Dup_Scope --AzMan_SP_Check_Dup_Operation --AzMan_SP_Check_Dup_Group_For_Given_Parent --AzMan_SP_Check_Dup_Group grant execute on AzMan_SPI_AzAuthorizationStore to public grant execute on AzMan_SPI_AzApplication to public grant execute on AzMan_SPU_AzApplication to public grant execute on AzMan_SPI_AzScope to public grant execute on AzMan_SPI_AzOperation to public grant execute on AzMan_SPI_AzApplicationGroup to public grant execute on AzMan_SPI_AzTask to public --AzMan_SPI_AzTask_Single_Operation --AzMan_SPD_AzTask_Single_Operation grant execute on AzMan_SPI_AzTask_Multi_Operations to public --AzMan_SPI_AzRoleAssignment_Single_Operation --AzMan_SPD_AzRoleAssignment_Single_Operation grant execute on AzMan_SPI_AzRoleAssignment_Multi_Operations to public --AzMan_SPI_AzTask_Single_Task --AzMan_SPD_AzTask_Single_Task grant execute on AzMan_SPI_AzTask_Multi_Tasks to public --AzMan_SPI_AzRoleAssignment_Single_Task --AzMan_SPD_AzRoleAssignment_Single_Task grant execute on AzMan_SPI_AzRoleAssignment_Multi_Tasks to public grant execute on AzMan_SPI_AzRoleAssignment to public grant execute on AzMan_SPU_AzAuthorizationStore to public grant execute on AzMan_SPU_AzScope to public grant execute on AzMan_SPU_AzOperation to public grant execute on AzMan_SPU_AzApplicationGroup to public grant execute on AzMan_SPU_AzTask to public grant execute on AzMan_SPU_AzRoleAssignment to public grant execute on AzMan_SPIU_AzApplicationGroup_LDAPQuery to public grant execute on AzMan_SPIU_Bizrule to public grant execute on AzMan_SPIU_AzApplicationGroup_Bizrule to public grant execute on AzMan_SPIU_AzTask_Bizrule to public --AzMan_SPI_AzApplicationGroup_Single_SidMember --AzMan_SPD_AzApplicationGroup_Single_SidMember grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidMembers to public grant execute on AzMan_SPI_AzApplicationGroup_Multi_SidNonMembers to public --AzMan_SPI_AzApplicationGroup_Single_AppMember --AzMan_SPD_AzApplicationGroup_Single_AppMember grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppMembers to public grant execute on AzMan_SPI_AzApplicationGroup_Multi_AppNonMembers to public --AzMan_SPI_AzRoleAssignment_Single_SidMember --AzMan_SPD_AzRoleAssignment_Single_SidMember grant execute on AzMan_SPI_AzRoleAssignment_Multi_SidMembers to public -- AzMan_SPI_AzRoleAssignment_Single_AppMember -- AzMan_SPD_AzRoleAssignment_Single_AppMember grant execute on AzMan_SPI_AzRoleAssignment_Multi_AppMembers to public -- spDrop_AzMan_Table grant execute on AzMan_SPS_Get_AzAuthorizationStoreByName to public grant execute on AzMan_SPS_Enum_AzApplications to public grant execute on AzMan_SPS_Get_AzApplication to public --AzMan_SPS_Get_AzApplication_AppData --AzMan_SPS_Get_AzScope_AppData --AzMan_SPS_Get_AzAuthorizationStore_AppData grant execute on AzMan_SPS_Enum_AzScope to public grant execute on AzMan_SPS_Enum_AzApplicationGroup to public grant execute on AzMan_SPS_Enum_AzTask to public grant execute on AzMan_SPS_Enum_AzTask_Operations to public grant execute on AzMan_SPS_Enum_AzTask_Tasks to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_Tasks to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_Operations to public grant execute on AzMan_SPS_Enum_AzRoleAssignment to public grant execute on AzMan_SPS_Get_AzApplicationGroup to public grant execute on AzMan_SPS_Get_AzApplicationGroup_BizruleInfo to public grant execute on AzMan_SPS_Get_AzTask_BizruleInfo to public grant execute on AzMan_SPS_Get_AzApplicationGroup_LDAPQuery to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_SIDNonMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppMembers to public grant execute on AzMan_SPS_Enum_AzApplicationGroup_AppNonMembers to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_SIDMembers to public grant execute on AzMan_SPS_Enum_AzRoleAssignment_AppMembers to public grant execute on AzMan_SPS_Get_AzScope to public grant execute on AzMan_SPS_Enum_AzOperation to public grant execute on AzMan_SPS_Get_AzOperation to public grant execute on AzMan_SPS_Get_AzTask to public grant execute on AzMan_SPS_Get_AzRoleAssignment to public grant execute on AzMan_SPD_AzOperation to public grant execute on AzMan_SPD_AzScope to public grant execute on AzMan_SPD_AzApplication to public grant execute on AzMan_SPD_AzAuthorizationStore to public grant execute on AzMan_SPD_AzApplicationGroup to public grant execute on AzMan_SPD_AzTask to public grant execute on AzMan_SPD_AzRoleAssignment to public grant execute on AzMan_SPD_SQLRole_ForObject to public grant execute on AzMan_SPS_Enum_AzAuthorizationStoreUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzApplicationUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzScopeUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzApplicationGroupUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzOperationUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzRoleAssignmentUpdateTimeStamp to public grant execute on AzMan_SPS_Enum_AzTaskUpdateTimeStamp to public grant execute on AzMan_SP_GenerateObjectAudit to public grant execute on AzMan_SP_GenerateMemberAudit to public grant execute on AzMan_SP_GenerateGenericAudit to public grant execute on AzMan_SPS_Get_ObjectSecurityOption to public grant execute on AzMan_SPS_Get_DBOwners to public grant execute on AzMan_SPS_Get_Role_For_Object to public grant execute on AzMan_SP_GetRoleMemberCount to public grant execute on AzMan_SPI_SQLRole_From_XP to dbo grant execute on AzMan_SPD_All_SQLRole_ForObject to dbo grant execute on AzMan_SPD_User_From_SQLRole_From_XP to dbo grant execute on AzMan_SPI_Add_User_To_SQLRole_From_XP to dbo grant execute on AzMan_SPU_SqlRoleUpdated to public grant execute on AzMan_SPI_Create_SqlRole_For_Object to public GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'AzGenerateAudit' and type = 'X') exec sp_addextendedproc 'AzGenerateAudit', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManAddUserToRole' and type = 'X') exec sp_addextendedproc 'xp_AzManAddUserToRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManRemoveUserFromRole' and type = 'X') exec sp_addextendedproc 'xp_AzManRemoveUserFromRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManDeleteRole' and type = 'X') exec sp_addextendedproc 'xp_AzManDeleteRole', 'AzSqlExt.dll' GO IF not EXISTS (SELECT name FROM sysobjects WHERE name = 'xp_AzManAddRole' and type = 'X') exec sp_addextendedproc 'xp_AzManAddRole', 'AzSqlExt.dll' GO grant execute on AzGenerateAudit to public grant execute on xp_AzManAddUserToRole to public grant execute on xp_AzManRemoveUserFromRole to public grant execute on xp_AzManDeleteRole to public grant execute on xp_AzManAddRole to public MSFT C)W d,X Lx@l4` ( T  H t<| ,Pl2$K0TOQ4BQ3H@4B ]`@@P4B]=x@\ 4Bk@TxP4Btl&@h4B u@P4Bu @84B|@P4Bh}@< 4B h @L P4B 8@| 4B P@ 4P4B 0 h@H P4B  @ h4B@:4BL@0D4B@ 4B@@`x<4BL@F4BD@$-4B(@ <P4B@@|\(!4BtX@|P4Bp@0 "4Bؚ@84B$@T!4Bp@hpX'4Bܜ@@4B̞@T(h4B@Hh4Bh@(hX4B80@H4B H@H4B!0`@ H&B"ģ h!!#ģ '!$ !%B%Lx!%B&L"0%B'L8"@ !(LbX"0HHxx8hP `(@X0@:>20FF킛jO0EŕJ Bld0{'Mk~SHx^m@kۦ5,`$E.}VEjL<x   0/stdole2.tlbWWW/D.x (D2.|0P"@*.$+h0/ !- 1`1( \'$8&##",+-<-0(L)8!`(d "(0d# &<#l T'l!l,h&L0 /)$*"p+( .th/P/10&-`*81 H%x")21,'H* &+X!H+t)'*$8"0(H 1<$( AZROLESLibWW8E5IAzAuthorizationStoreWWW DescriptionWppbstrDescription2ApplicationDataWpbstrApplicationData 7)DomainTimeoutWWWplPropWWЪScriptEngineTimeoutWMaxScriptEngines-GenerateAuditsWW.pbPropWW(Writable]vpfPropWW mGetPropertyW^lPropIdW varReservedW5pvarProp4 'SetPropertyWIvarPropWAddPropertyItemWDeletePropertyItemWW:PolicyAdministrators RpvarAdminsWW "PolicyReadersWWW pvarReadersWzAddPolicyAdministratorWW VbstrAdminWWW RDeletePolicyAdministratorWWWAddPolicyReaderW bstrReaderWW`JDeletePolicyReaderWW NInitializeWWlFlagsWW ;bstrPolicyURLWWW (UpdateCacheWxDeleteWWd8IAzApplicationsWdzItemIndexWWW pvarObtPtrWWd0vCountWWWplCountWdxA_NewEnum ppEnumPtrWWW nApplicationsppAppCollectionW8uIAzApplicationWWTName spbstrNameWWWAuthzInterfaceClsidWp pbstrPropWWWVersionWQApplyStoreSaclWW, 8IAzScopesWWW2ScopesWWppScopeCollectionWWW8IAzScopep8IAzApplicationGroupskWApplicationGroupsWWWppGroupCollectionWWWX8KIAzApplicationGroupWX\TypeX LdapQueryWWWX 2AAppMembersWWXT AppNonMembersWWWXtMembersWX NonMembersWWXT SpAddAppMember3bstrPropXmDeleteAppMemberWXAddAppNonMemberWXKDeleteAppNonMemberWWX rAddMemberWWWX HDeleteMemberXl 4AddNonMemberXc"DeleteNonMemberWX\SubmitWWX AddMemberNameWWWXFDeleteMemberNameXAddNonMemberNameXHKDeleteNonMemberNameWX$ MembersNameWXV@NonMembersNameWWaOpenApplicationGroup bstrGroupNameWWWVppGroupWF4CreateApplicationGroupWWDeleteApplicationGroupWW8mIAzRolesRolesWWWppRoleCollection 8^.IAzRoleW w;AddTaskW  BDeleteTaskWW  ڑAddOperation ?DeleteOperationW  ~VOperationsWW LTasksWWWSOpenRole bstrRoleName[ppRoleWW XCreateRoleWW KDeleteRoleWW48IAzTasksuMppTaskCollection8pIAzTaskWpMBizRuleW BizRuleLanguageW BizRuleImportedPathW1IsRoleDefinitionObstrOpWW(bstrTaskOpenTask _bstrTaskNameppTaskWW CreateTaskWW ϦCanBeDelegatedWWP QBizrulesWritablepPolicyAdministratorsNamed qPolicyReadersNameWWW$jAddPolicyAdministratorNameWWcDeletePolicyAdministratorNameWWWAddPolicyReaderNameW<>DeletePolicyReaderNameWW DaOpenScopeWWW +bstrScopeNameWWWppScopeW ѓCreateScopeW| ZDeleteScopeWL4 8IAzOperationsWWW BppOperationCollectionWWW 8 IAzOperation tOperationIDW OpenOperationWWW |bstrOperationNameWWW` a9ppOperationW (CreateOperationW48IAzClientContextD AccessCheckWbstrObjectNameWW  YvarScopeNamesWWWt n#varOperationsWWWVvarParameterNamesWWW IvarParameterValuesWWvarInterfaceNamesWWW -varInterfaceFlagsWWW rvarInterfacesWWW pvarResultsW GetBusinessRuleStringWWWXgpbstrBusinessRuleStringWUserDnWW UserSamCompatWWWH AddDelegatedPolicyUserNameWW sDeleteDelegatedPolicyUserNameWWW%OpenApplicationW4 KbstrApplicationNameW( ڃppApplicationWWWCreateApplicationWWWL DeleteApplicationWWW TargetMachineWWW| gpbstrTargetMachineWW opbApplyStoreSacl CloseApplication| OrlFlagWWWx 8IAzAuthorizationStore2WW8lIAzApplication2W@08}mIAzClientContext2WWW@ZGetAssignedScopesPageWWWSPageSizeD BpvarCursorWW ]pvarScopeNamesWW@;AddRolesvarRoles@AddApplicationGroupsdvarApplicationGroups@ fAddStringSidsWWWP varStringSidsWWW@X 3LDAPQueryDNWpbstrLDAPQueryDND!InitializeClientContextFromToken2WWWlulTokenHandleLowPartl~ulTokenHandleHighPartWWWInitializeClientContext2IdentifyingStringWWWxJEOpenApplication2xCreateApplication2WW8IAzAuthorizationStore3WW2IsUpdateNeededWW$PpbIsUpdateNeeded`BizruleGroupSupportedWWW ?pbSupportedWUpgradeStoresFunctionalLevel8lFunctionalLevel!IsFunctionalLevelUpgradeSupportedWWWGetSchemaVersionOplMajorVersionWWplMinorVersionWW$8mIAzApplication3W ScopeExistsWdpbExistWl4 8IAzScope2WWW 8hIAzRoleDefinitionsWWl$ RoleDefinitionsW@ppRoleDefinitionsWWW4 8IAzRoleDefinitionWWW8)IAzRoleAssignmentsWW4pVRoleAssignmentsW |bRecursiveWW~ppRoleAssignmentsWWW4AddRoleDefinitionWWWhIbstrRoleDefinitionWW4D uDeleteRoleDefinitionl8CreateRoleDefinition4bstrRoleDefinitionNameWWlKuOpenRoleDefinitionWW 8IAzRoleAssignmentWWW0ScopeWWWl CreateRoleAssignmentObstrRoleAssignmentNameWW ۮppRoleAssignmentl ]OpenRoleAssignmentWWl ]DeleteRoleAssignment OpenScope2WW&ppScope2T CreateScope2$ JDeleteScope2BizRulesEnabledWP 7pbEnabledWWW`  8 IAzOperation2WWW h8IAzTask2( 8IAzApplicationGroup2 8~mIAzClientContext3WWW \ pAccessCheck2  ]lOperationWWh#AplResult IsInRoleAssignmentWW< ިpbIsInRoleWW < <7GetOperationsWWW (O]GetTasks 88YIAzBizRuleParameters  RAddParameter  bstrParameterNameWWWl:varParameterValueWWW  AddParametersWWW nGetParameterValueWWWpvarParameterValueWW @ϱRemoveWW|]varParameterName RemoveAllWWW QBizRuleParametersWWWppBizRuleParamWWT 8IAzBizRuleInterfacesT  fAddInterface6bstrInterfaceNameWWWh4lInterfaceFlagWW varInterfaceT ´AddInterfacesWWWT &GetInterfaceValueWWW XBizRuleInterfacesWWWppBizRuleInterfacesW $ (`GetGroupsWWW [ulOptionsWWW rpGroupArrayW XSids=pStringSidArrayW 80gIAzBizRuleContextWWW TٍBusinessRuleResultWW +BusinessRuleStringWW  GetParameter @8IAzPrincipalLocatorW 84IAzNameResolverW  V3NameFromSidWHٹbstrSidW_pSidType  %9NamesFromSidsWWWvSidsWWWl XpvSidTypesWWpvNamesW  TNameResolver%ppNameResolverWW `8rIAzObjectPickerWH 8,wireHWND 8_RemotableHandle cfContext|8Z__MIDL_IWinTypes_0009WWWJhInprocW,ZhRemoteW luWWW  5GetPrincipalsWWW 4#hParentWndWW8 lbstrTitleWWWD!ZpvSidsWW t SObjectPickerzppObjectPickerWWt8|AzAuthorizationStore8^AzBizRuleContext<` 8ucAzPrincipalLocatorWW8tagAZ_PROP_CONSTANTS 0`AZ_PROP_NAME0\AZ_PROP_DESCRIPTIONW0-EAZ_PROP_WRITABLE0 AZ_PROP_APPLICATION_DATA0AZ_PROP_CHILD_CREATE0fYAZ_MAX_APPLICATION_NAME_LENGTHWW 0=AZ_MAX_OPERATION_NAME_LENGTH09mAZ_MAX_TASK_NAME_LENGTHW0WAZ_MAX_SCOPE_NAME_LENGTH 0AZ_MAX_GROUP_NAME_LENGTH 0_AZ_MAX_ROLE_NAME_LENGTHW@0$AZ_MAX_NAME_LENGTHWW02AZ_MAX_DESCRIPTION_LENGTHWWW0~bAZ_MAX_APPLICATION_DATA_LENGTHWW0AZ_SUBMIT_FLAG_ABORT0\|AZ_SUBMIT_FLAG_FLUSH0"hAZ_MAX_POLICY_URL_LENGTH!0IAZ_AZSTORE_FLAG_CREATEWW#!0DAZ_AZSTORE_FLAG_MANAGE_STORE_ONLYWWWp0AZ_AZSTORE_FLAG_BATCH_UPDATE8 !0ߏAZ_AZSTORE_FLAG_AUDIT_IS_CRITICALWWW "0pgAZ_AZSTORE_FORCE_APPLICATION_CLOSEWW80AZ_AZSTORE_NT6_FUNCTION_LEVELWWW *0AZ_AZSTORE_FLAG_MANAGE_ONLY_PASSIVE_SUBMITWW%0AZ_PROP_AZSTORE_DOMAIN_TIMEOUTWW!0AZ_AZSTORE_DEFAULT_DOMAIN_TIMEOUTWWW %0DAZ_PROP_AZSTORE_SCRIPT_ENGINE_TIMEOUTWWW0EAZ_AZSTORE_MIN_DOMAIN_TIMEOUTWWW$$0AZ_PROP_APPLICATION_AUTHZ_INTERFACE_CLSIDWWW0U}AZ_PROP_APPLICATION_VERSIONW,!0eAZ_MAX_APPLICATION_VERSION_LENGTHWWW,0AZ_PROP_APPLICATION_NAME&#0EAZ_PROP_APPLICATION_BIZRULE_ENABLEDW8 0 AZ_PROP_APPLY_STORE_SACL@(0AZ_PROP_GENERATE_AUDITSW\-0.AZ_PROP_POLICY_ADMINSWWWl.0AZ_PROP_POLICY_READERSWW %0}AZ_PROP_DELEGATED_POLICY_USERSWW-0]5AZ_PROP_POLICY_ADMINS_NAMEWW$ 04?4@@4A4B4C4D4E4F4XG4YH4I4J4K4L4M4N4O4P4Q4 R4!S4T4"U4#V4W4X4Y4Z4[4\4]4^4_4`4a4@@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:@;@<@=@>@?@@@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@x"""""#<#d#####$<$h$$$$$ %H%x%%% &8&h&&&&,'\''''(@(`((((( )L)t))))*@*`*****$+H+p++++,D,l,,,,-<-\----.<.l....0/h////(0L0|0000 181`11112D2(<Pdx,@Th|0DXl  4H\p$8L`t(<Pdx,@Th|0DXl)1 B}8f[΂@t~: FILEREGISTRYTYPELIBMUIMUIen-US (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ (08@HPX`hpxȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ (08@HPX`hpxȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxȪЪت (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpxȯЯد  (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ (08@HPX`hpxȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ (08@HPX`hpxȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxȪЪت (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpxȯЯد0 (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ (08@HPX`hpxȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ (08@HPX`hpxȧЧا (08@HPX`hpxȨШب (08@HPX`hpxȩЩة (08@HPX`hpxȪЪت (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@HPX`hpxȭ (08H`pxЮخ (08@HP`hpxȯЯد@ (08@HPX`hpxȠРؠ (08@HPX`hpxȡСء (08@HPX`hpxȢТآ (08@HPX`hpxȣУأ (08@HPX`hpxȤФؤ (08@HPX`hpxȥХإ (08@HPX`hpxȦЦئ (08@HPX`hpxȧЧا (08@HPX`hpx(`x 0@P`p 8pث@XpЬ0`xح@X0HЯP 8pؠ (8`hpxء08@HPX`hx(@HP08HPX`hpxpxؠ`hpȡСء PX`hpxȢ(08@HPXpxأ 8@HPX`hpxȤФؤ (08@HPX`hpxȥХإPXЦئPXЧاPXШبPXЩةPXЪتPXЫثPXЬجPXЭح(8HXxЮ(8@HPXhpxȯЯ| 8PhР@XpСPhТ0` 8XhФ0X`xإ0@`pЦ 08HP`hxЧ0Hxب 8PЩ0H`xȪXxЫث (8HP`pxȬج8@`hح(0PXxȮЮ 0@HXhpЯ  08X`pРؠ (8HP`pxȡ8@P`hxآ(0PXxȣУ 0@HXhp08X`Хإ (8HP`pxȦ(8@`hا(0PXxȨ@ l(08@HPX`pxȠРؠ (08@HPX`hpx