+
    C)jFV                        R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ]! ]	4      P                  4       P                  tRR R lltR tR tRtR tR	 tR
 tR tR tR tR tR tR t]R8X  d   ]! ]! 4       4      hR# )z=Draft 2020-12, exact-state, and negative self-test validator.)annotationsN)Pathc               (    V ^8  d   QhRRRRRRRR/# )   rulestrciddetailreturnNone )formats   "3/home/user/billing-ledger-review.2T15CP/validate.py__annotate__r   
   s.     L Ls L Lc L4 L    c                `    \        V R V  R2V'       d   RV 2,           4      hR,           4      h)z: []  
ValueError)r   r   r	   s   &&&r   failr   
   s2    
uCvQ'6Qvh<J
KKrJ
KKr   c                >    V  Uu/ uF  q"V,          VbK  	  up# u upi Nr   )itemskeyitems   && r   keyedr      s     (-.ItO...s   c                >    W#8w  d   \        WR V: RV: 24       R# R# )z	expected z, got N)r   )r   r   actualexpecteds   &&&&r   assert_equalr!      s$    T)H<vfZ@A r   c                    \         P                  ! \         Uu/ uF  qW,          bK  	  upR RRR7      p\        P                  ! VP                  R4      4      P                  4       # u upi )TF)	sort_keys
separatorsensure_asciiutf-8),:)jsondumpsADJUSTMENT_SIGNED_FIELDShashlibsha256encode	hexdigest)valuek	canonicals   &  r   adjustment_hashr3      s_    

1IJ1IAuxK1IJVZgq  AF  GI>>)**734>>@@ Ks   A(c                d    R Uu/ uF  q\         P                  ! W,          4      bK!  	  up# u upi )	purchases)r5   receiptsclaimscyclesadjustmentsrefundStates)copydeepcopy)initialr1   s   & r   expected_snapshotr>      s*    2~2~Qt}}WZ((2~s   %-c                h    \        R WR,          \        V4      4       \        RWR,          . 4       R# )zzero-mutation-statestatezzero-mutation-ledgerledgerAppendsN)r!   r>   )r   r=   r    s   &&&r   reject_unchangedrB   #   s-    &g->@QRY@Z['.GLr   c           	        R VR ,          RVR,          RVR,          RVR,          /pVR,          R8X  d   RMRpRVR,          RVR,          R	V/p\        R
WR,          R,          VR,          V.,           4       \        RWR,          R,          VR,          V.,           4       R F$  p\        RWR,          V,          W',          4       K&  	  R# )eventIdpayloadHashobjectId	eventTypetypepayment_webhookpayment_grantrefund_reversal
purchaseIdeffectzreceipt-exact-transitionr@   r6   zclaim-exact-transitionr7   zwebhook-unrelated-stateN)r5   r8   r9   )r!   )r   eventr=   r    receiptrM   claimnames   &&&&    r   assert_webhook_transitionrR   (   s    %	*M5;OQ[]bcm]np{  ~C  DJ  ~K  LG %f1B B_HYFz*L%:MxY_`E+S72CJ2OQXYcQdhogpQpq)30A(0KWU]M^bgahMhi6.g5Ft5Lgm\ 7r   c                   V R ,          R9   d   R# VR,           Uu. uF  q"R,          V R,          8X  g   K  VNK  	  ppV'       d!   V^ ,          R,          V R,          8X  d   R# R# \        VR,          R4      P                  V R,          4      pT;'       dy    VR,          V R,          8H  ;'       d^    VR,          V R	,          8H  ;'       dC    VR
,          R8H  ;'       d/    VR,          V R,          8H  ;'       d    V R,          VR,          9   pV'       g   R# \        VR,          4      \        V R,          4      u;8:  d   \        VR,          4      8  g   M R# R# u upi )deltar9   idempotencyKeyrE   operatorAuthorizationsauthorizationId
operatorIdauthorizedByversionauthorizationVersionsourceoperator_authorization_registrysourceVersionauthorizationSourceVersion
reasonCodescopes	validFromrequestedAt	expiresAt   0-0)rejectedADJUSTMENT_INVALIDmalformed_rejected)noopNreplay_same_hash_noop)rh   EVENT_PAYLOAD_CONFLICTreplay_different_hash_rejected)rh   ADJUSTMENT_UNAUTHORIZEDunauthorized_rejected)rh   ro   expired_rejected)acceptedNrr   )r   getint)rN   r=   asameauthidentitys   &&    r   derive_adjustmentry   2   s   W~$EE}-`-!3C1DN^H_1_AA-D`7=!U=%9988UU124EFJJ5QbKcdD  \  \\*eN.CC  \  \Y[`aw[xHx  \  \  ~B  CK  ~L  Pq  ~q  \  \  vz  {J  vK  OT  Uq  Or  vr  \  \  w|  }I  wJ  NR  S[  N\  w\HMM[!"c%*>&?X#d;FWBXXHH'' as
   E!E!c                   R R0pV R,          R8X  d   V0 Rm,          # V R,          R8X  d   V0 Rm,          # V R,          R8X  d   V0 Rm,          # V R,          R8X  d   V0 Rm,          # V R,          R
8X  d   V0 Rm,          # V R,          R8X  d   VR0,          # V R,          R8X  d   VRR	0,          # \        V R,          4      h)rollbackprovider_callsrH   create_purchaseregistrationrI   rM   refund_webhookoperator_adjustmentauthorizationconversion_acceptcycle_failedregister_jurisdiction>   taxowneramountcurrencyquantityjurisdictionr~   canonical_purchase>   r   rP   r   r   rM   r   r   	signaturer   payload_hashprovider_eventprovider_objectr   >   r   rP   r   r   rM   r   r   r   r   r   r   r   r   cumulative_allocation>   auditrM   r   r   >   r   r   rM   r   )rN   commons   & r   event_assertionsr   C   s    *+FV}))  A  A  	AV}))  F  F  	FV}((  _  _  	_V}--LLLV}++555V}&
""V}//999
U6]
##r   c                &  a3a4a5a6a7 V R ,          V R,          V R,          r2pR FR  w  rEW$,           Uu. uF  qfV,          NK  	  pp\        V4      \        \        V4      4      8w  g   KF  \        RW4       KT  	  R FZ  w  rEVR,          V,           Uu. uF  qfV,          NK  	  pp\        V4      \        \        V4      4      8w  g   KN  \        RW4       K\  	  \        VR
,           Uu0 uF  qfR,          kK  	  up4      \        VR
,          4      8w  d   \        RV4       \        VR,          4      \        VR,          4      8w  d   \        RV4       V R,           EF  o5S5R,          R8X  d   \	        RVS5R,          \        S54      4       VR
,           F   p\	        RWR,          \        V4      4       K"  	  \        S5V4      p	\	        RWR,          VR ,          VR!,          3V	4       K  S5R,          R"8X  Ed   \        V53R# lVR$,           4       R%4      p
T
;'       dJ    V
R&,          S5R',          8H  ;'       d/    V
R(,          VR,          8H  ;'       d    V
R,          VR,          8H  pT;'       dG    \        V
R),          4      \        VR,          4      u;8*  ;'       d    \        V
R*,          4      8  Mu pV'       d   RM2V'       d*   \        VR,          4      \        V
R*,          4      8  d   RMRp	\	        R-WR,          VR ,          3V	4       EK  S5R,          R9   g   EK  S5R0,          o6S6 Uu/ uF  qR18w  g   K  VS5V,          bK  	  upo4\        ;QJ d     V4V63R2 lS4 4       F  '       g   K   R3M	  R4M! V4V63R2 lS4 4       4      '       d   \        R5V4       \        VR,          R4      P                  S6R,          4      p\        VR,          R4      p\        VR,          R4      pS5R6,          '       g   Rp	EM*V'       g   Rp	EMS6R7,          VR7,          8w  d   Rp	EMS6R8,          VR9,          8w  d   Rp	MS6R:,          VR:,          8w  d   Rp	MS6R;,          VR;,          8w  d   Rp	MS6R<,          VR<,          8w  d   Rp	MS6R=,          VR=,          8w  d   Rp	MS5R,          R.8X  d   S6R1,          R>8w  d   Rp	MnS5R,          V9   dN   VS5R,          ,          pVR,          S5R,          8X  d&   VR,          S5R,          8X  d   S5R,          V9   d   RMRp	MS5R,          V9   d   Rp	MRp	\	        R@WR,          VR ,          3V	4       V	^ ,          R+8X  g   EK   \        VS5W#4       EK  	  VR,          R9   d   \        WV4       VR$,           Uu/ uF  pVR;,          VRA,          3VbK  	  ppVR,          VR,          R,          ,            F  p\        VR9,          4      \        VR7,          4      \        VRB,          4      ,          8w  d   \        RCV4       VP                  VR;,          VRD,          34      pV'       g   \        REV4       VR&,          VR',          8w  g   K  \        RFV4       K  	  / pVR,          VR,          R,          ,            FP  pVR,          VR,          3pVR,          V9   d"   VVR,          ,          V8w  d   \        RGV4       VVVR,          &   KR  	  VR,          R,           Uu0 uF  pVR,          kK  	  ppVR,          R,           Uu0 uF  pVR,          kK  	  ppVR,          R,           F9  pVR,          V9  d   \        RHV4       VR,          V9  g   K-  \        RIV4       K;  	  \        RJ VR,           4       4      pVRK,          p\        V Uu0 uF  qfR,          kK  	  up4      \        V4      8w  d   \        RLV4       V\        RM V 4       4      ,           p\	        RNV\        VRO,          4      V4       \	        RPV\        VRQ,          4      \        ^ V4      4       \	        RRV\        VRR,          4      \        ^ V) 4      4       VR,          R9   d   V'       d   \        RSV4       \        VR,          R,          R4      p\        VR,          R4      pV R,           EF9  o5\	        RTV\        VRU,          4      \        4       P                  ! RV V R,           4       !  4       VRW,          RX8w  d   \        RYVRZ4       S5R,          R9   d   \        VR,          R4      P                  S5R,          4      pVR,          R9   d   V'       g   \        R[V4       V'       ds   R F=  pVR,          R9   g   K  S5V,          VV,          8w  g   K*  \        R\V,           V4       K?  	  VR,          R9   d"   S5R8,          VR9,          8w  d   \        R]V4       VR,          R+8X  d   S5R6,          '       g   \        R^V4       S5R,          R/8X  Ed   VR,          R+8X  Ed   \        VR,          R4      S5R,          ,          pVP                  S5R,          R_RXR`RX/4      p\        VR_,          4      \        VR`,          4      p!p \        S5R_,          4      \        VR9,          4      \        VR7,          4      p$p#p"V"V 8  d   \        RaV4       V"V#8  d   \        RbV4       S5Rc,          RX8w  d   V"V 8X  d   \        RdV4       V"V#8X  d   T$MV$V",          V#,          p%V%V!8  g   V%V$8  d   \        ReV4       V%V!,
          ) p&V Uu. uF  qfRf,          R9   g   K  VNK  	  p'p\        V'4      ^8w  g   \        V'^ ,          Rg,          4      V&8w  d   \        RhV4       VP                  S5R,          4      p(V('       d/   \        V(R_,          4      V"8w  g   \        V(R`,          4      V%8w  d   \        RiV4       S5R,          R"8X  d   VR,          R+8X  d   VP                  S5R;,          S5RD,          34      p\        VR,          4      p)V'       d2   \        VR),          4      T)u;8:  d   \        VR*,          4      8  g   M \        RjV4       V'       d7   VR(,          VR,          8w  g   VR,          VR,          8w  d   \        RkV4       S5R,          R8X  g   EK.  S5Rg,          R9   d)   VR,          R,8w  g   VR!,          Rl8w  d   \        RmV4       \        VR,          R4      P                  S5R,          4      p*T*;'       d    V*Rn,          S5Ro,          8H  ;'       d    V*RA,          S5Rp,          8H  ;'       d    V*Rq,          Rr8H  ;'       d}    V*Rs,          S5R&,          8H  ;'       db    \        V*R),          4      \        S5Rt,          4      u;8*  ;'       d    \        V*R*,          4      8  Mu ;'       d    S5Ru,          V*Rv,          9   p+VR,          R+8X  d   V+'       g   \        RwV4       VR
,           U,u. uF  p,V,R,          S5R,          8X  g   K  V,NK  	  p-p,V-'       g   EK  V-^ ,          R,          S5R,          8H  p.V.'       d)   VR,          R?8w  g   VR!,          Rx8w  d   \        RyV4       V.'       d   EK  VR,          R,8w  g   VR!,          Rz8w  g   EK-  \        R{V4       EK<  	  VR|,          o7VR,          R}8X  Ed   S7'       g   \        R~V4       S7R,          p/V/ U,u. uF  p,V,R,          R+8X  g   K  V,NK  	  p0p,\        V04      ^8w  g   S7R,          V0^ ,          R,          8w  d   \        RV4       \        V/4      \        V R,          4      8w  d   \        RVR4       \        V/ U,u0 uF  p,V,R,          kK  	  up,4      \        V/4      8w  g1   \        V/ U,u0 uF  p,V,R,          kK  	  up,4      \        V/4      8w  d   \        RV4       V R,           U1u/ uF  p1V1P                  R4      V1bK  	  p2p1\        V24      V/ U,u0 uF  p,V,R,          kK  	  up,8w  d   \        RVR4       V/ F  o3V2S3R,          ,          o5S3R,          S3R,          8w  d   \        RV4       S3R,          R+8X  dX   S3R	,          S5P                  R	4      8w  g+   S3R,          S7R,          8w  g   S3R,          S7R,          8w  d   \        RV4       K  K  \        ;QJ d    V33R lR 4       F  '       g   K   R3M	  R4M! V33R lR 4       4      '       g   K  \        RVS3R,          4       K  	  \        ;QJ d    V73R lV/ 4       F  '       g   K   R3M	  R4M! V73R lV/ 4       4      '       d   \        RV4       V2P                  S7R,          4      o5S5'       dy   V0^ ,          R,          S5R,          8w  g]   V0^ ,          R	,          S5P                  R	4      8w  g9   V0^ ,          R,          S7R,          8w  g   V0^ ,          R,          S7R,          8w  d   \        RV4       S7R,          V Uu0 uF  qfR,          kK  	  up9  d   \        RV4       R%# R%# S7e   \        RV4       R%# R%# u upi u upi u upi u upi u upi u upi u upi u upi u upi u up,i u up,i u up,i u up,i u up1i u up,i u upi )caseIdr=   r    r5   rL   r6   rD   r7   rF   cycleIdr9   r:   rV   rW   ledgerBeforer   zunique-initialr@   zunique-expectedrU   zadjustment-idempotency-uniqueevaluationAtdatabaseNowzauthoritative-timeeventsrH   r   adjustment-payload-hashrE   zadjustment-stored-payload-hashadjustment-derived-outcomeoutcomeerrorauditOutcomer}   c              3     <"   T F4  qR ,          SR ,          8X  g   K  VR,          SR,          8X  g   K0  Vx  K6  	  R# 5i)r   rZ   registrationVersionNr   ).0rrN   s   & r   	<genexpr>%validate_semantics.<locals>.<genexpr>j   sP       \#;a?PTYZhTi?inopynz  D  EZ  [  o[#;s   ??
?registrationsNr_    registrationAuthorizationVersionevaluatedAtrb   rd   rr   rh   jurisdiction-derived-outcomerI   r   providerTruthpaymentStatec              3  J   <"   T F  pSV,          SV,          8g  x  K  	  R # 5ir   r   )r   r1   envelopetruths   & r   r   r   r   s     =Hq8A;%(*Hs    #TFprovider-truth-bindingsignatureVerifiedr   amountCentsitemSubtotalCentsr   r   ownerIdtaxAmountCentspaidrk   webhook-derived-outcomerZ   unitAmountCentspurchase-subtotalr   zregistration-bindingzregistration-auth-bindingzreceipt-bindingzclaim-purchasezclaim-receiptc              3  F   "   T F  p\        VR ,          4      x  K  	  R# 5irT   Nrt   r   xs   & r   r   r      s     @(?1s1W:(?   !rA   zledger-key-uniquec              3  F   "   T F  p\        VR ,          4      x  K  	  R# 5ir   r   r   s   & r   r   r      s     4Gq3qz??Gr   z
ledger-net	ledgerNet	spendablespendableBalancedeficitzrollback-ledgerzassertion-coverage
assertionsc              3  8   "   T F  p\        V4      x  K  	  R # 5ir   )r   r   es   & r   r   r      s)       XE  vDpqXhijXkXk  vD   providerCallsrf   zprovider-call-countz.fixture events are inbound or persistence-onlyzwebhook-purchasezwebhook-canonical-zwebhook-canonical-amountwebhook-signature#cumulativeRefundedItemSubtotalCentsreversedCreditsrefund-monotonicityrefund-over-reversaltaxRefundedCentszrefund-tax-onlyzrefund-allocation-boundsreasonrT   zrefund-derived-deltazrefund-exact-statezregistration-windowzregistration-evidence-timerj   zadjustment-malformedrX   rY   r[   r\   r]   r^   rc   r`   ra   zadjustment-authorizationrl   zadjustment-replay-samern   zadjustment-replay-conflictwinner
correlatedzwinner-requiredalternativesmatchingWinnerlabelwinner-exactly-onerace-one-to-onezalternative/event cardinalitysubmissionIdzrace-uniquezsubmission setzrace-label-correlationjobId	effectKeyzwinner-correlationc              3  :   <"   T F  pSV,          R Jx  K  	  R # 5ir   r   )r   r1   alternatives   & r   r   r      s     Y9XA[^4/9Xs   rejected-loser-identitiesc              3  p   <"   T F+  qR ,          R8g  ;'       d    VR,          SR,          8H  x  K-  	  R# 5i)r   rr   r   r   Nr   )r   ru   r   s   & r   r   r      s5     gZfUV|Z'PPAgJ?O8P,PPZfs   66zwinner-not-rejectedzwinner-effectzwinner-unexpected)r5   rL   r6   rD   r7   rF   r8   r   r9   adjustmentIdr:   rL   )rV   rW   )r   r   )r   r   r   r   r   r   )rr   N)rh   REGISTRATION_EXPIRED)rh   REGISTRATION_INVALID>   r   rI   )rh   UNVERIFIED_EVENT)rh   PURCHASE_NOT_FOUND)rh   INVALID_QUANTITY)rh   AMOUNT_MISMATCH)rh   CURRENCY_MISMATCH)rh   JURISDICTION_MISMATCH)rh   OWNER_MISMATCH)rk   N)rh   rm   )rh   OBJECT_IDENTITY_CONFLICT>   rk   rh   >   rk   rh   	reconcile>   rk   rr   )r   r   r   r   r   >   payment_refund_reversalpayment_dispute_reversalre   r   r   r   )lensetr   rt   r!   r3   ry   nextanyr   rs   rR   rB   summaxunion)8caser   r=   r    
collectionr   r   valuespriorderivedregauthority_ok	in_windowr1   purchaser6   r7   r   regspbindingsbreceipt_objectspurchase_idscbeforeappendsnetstate_refundsinitial_refundsfoldold_cold_r
cumulativesubtotalr   targetrT   	reversalssnowrw   validru   rv   	same_hashr   rr   r   events_by_submissionr   r   rN   r   r   s8   &                                                  @@@@@r   validate_semanticsr  V   s:   !(^T)_d:>N(C {
 ' 34 31# 34v;CK(($/?*O { w
 ( 1* => =1# =>v;CK(($/@*P w )?@)?A)?@ASQ^I_E``bf  hG  HK  cL
7>"#s7=+A'BBDI]^aDb h=112C}9M_dOef //=s-DXZijoZpq 0'w7G5si=PRZ[bRcemn|e}<~  AH  I6]//  \7?#;  \  ^b  cC  T  T3'C#DNpHq#q  T  Tvy  {H  wI  MT  Ub  Mc  wc  T  T  hk  ly  hz  ~E  FS  ~T  hTL$uuS-=)>#gmF\B])u)u`cdghsdt`u)uI,5(dpux  zA  BO  zP  vQ  UX  Y\  ]h  Yi  Uj  vj<`  pTG7	?RT\]dTe>fhop6]CC/*E-2JU>6I58UJHs=H=sss=H===tD\^a?bW[1<@DDU<EXYHWZ0)<H78,j9F,--9Yw)Kwz"hz&::FfG}%2E)FFRqz"hz&::FgG~&(>*BBNsGy!Xi%88Db''(H5E,FFRqv"33n8MQW8W  dDY`y!X-U9-.,-m,<m@T,TYZ[eYfjopzj{Y{  AF  GQ  AR  V\  A\.  bHz"f,8`g.'2C9:MxX_O`9acjkqzZ')#ugHI  L 	22x06=o6N	O6N1^Qy\
*1
,6ND	O[!(7"3K"@@@q$%&#a
m*<SCTAU=V*VVX\]pqtXu
((An%a(=&>?
@$-c2)*a0R.SSUYZuvyUz	 A HZ '!2:!>>>]AjM
*Y<8#9(>(A4HYZ]C^ 9 ? -5W,=j,IJ,IqQz]],IOJ+3G+<[+IJ+Ia!L//+ILJgx((\?,.5Ec0JZ=/oc1J ) @(?@@F_%G
g&geHHg&'W5t<OPS7Ts4G444Cc#h{&;"<SASX.@%A!B3q:N3s8I#67AsdD	=='4PabeKf).9,GM'.1,?Oh)#c(<2H.I#%++  XEuy  {C  vD  XE  KF  	GO$+T2GL|-}=@@GK(6::5;NOA	"&99!TJ\]`EaZA	*.AAeAhPQRSPTnVZ[opq[qruVv [I&*==%BVXYZmXnBnpt  vP  QT  qU	"J.u=P7Q7QSWXkloSp=**x	/BJ/NGK(6u\7JKA##E,$79^_bctux8yzCS!FGHSQbMcId5E+.u5Z/[+\]`abcvaw]xy|}~  @J  ~K  zL(J%&;C!@("D)?$D'(#-*e2CTJ[\_E`)838*9Lh9VFe|vh5OPS0T5L/E")s'Qx[<r-rqq'Is9~q C	!W(=$>$EtLbcfGgl 34AACDEzQUXYZ[lYmUnpvUvx|  ~R  SV  yW=++0CZ0Ohhn-e4I.JKLAGN+,CS;0#Ic!K.6IIDQfgjLka&(??1]CSU\]jUkCknr  tP  QT  oU=//W~,I&*48PTh8hjn  pF  GJ  kKw789JKOOPUVgPhiD  d  d4-u^/DD  d  diZ_`vZwIw  d  d  }A  BJ  }K  Mn  }n  d  d  sw  xG  sH  JO  Pl  Jm  sm  d  d  ru  vz  {F  vG  rH  JM  NS  Ta  Nb  Jc  rz  rz  dg  hl  mx  hy  dz  rz  d  d  D  EQ  R  VZ  [c  Vd  dE	"J.udC]^a>b$]3d3q9I7JERbLc7c!!3Ddtq'-0%2FF	(9"5v"=.AY[rAruy  {S  TW  vX yhy&9:&ER`Ia  dD  JD  GK  Lh  il  GmS  V HF	L(t-c2N+)F\Qy\:-E!!\Fx=!v&67!W9MMtThilOm|DN 33T:KCPo5pL1Lq'

L12c,6GG3kwOxkwfgPQR`PaPakwOxKy  ~A  BN  ~O  LO  QU  Vc  dg  QhAEhPAaee$45a7P#$L(QLq>):):L(QQSWXijmn~S'K&{>'BCE7#{>'BBDIabeDf9%3y)UYYy-AA[QXEY]cdk]lElp{  }H  qI  MS  T_  M`  q`  bf  g{  |  b@  q`Y9XYY9XYYY0[5IJ ( 3gZfg333gZfgggim  oD  EH  jI"&&v.>'?@N3U;K5LLPXYZP[\ePfhmhqhqr{h|P|  AI  JK  AL  MT  AU  W]  ^e  Wf  Af  jr  st  ju  vA  jB  DJ  KV  DW  jW  Y]  ^r  sv  Yw+&AAxx&AA4X[C\A		T"5c:	_ 5 ?@& K4 
P KJ '> t e G 2OxP(Q 'Bs   AJ1AJ6(AJ;7AK AK AK?AK
%AK1AKAK2AKAK)AK:AK#AK#AK(5AK-@3AK2AAK7I5AK<c                   V  Uu/ uF  q"R ,          VbK  	  ppRRR 3RRR 3RRR 3RRR 3RR	R
 3RRR 3RRR 3RRR 3RRR 3RRR 3RRR 3RRR 3RRR 3RRR  3R!RR" 3R!RR# 3R$R%R& 3R$R'R( 3R$R)R* 3.pV FA  w  rVp\         P                  ! W5,          4      q! V4       \        V4       \        R+R,V4       KC  	  R9 F\  w  r\         P                  ! V ^ ,          4      qVR2,          V
&   \        VP                  V4      4      '       d   KO  \        R3R,V
4       K^  	  VR,          R4,          ^ ,          p\        \        V4      4       Uu/ uF  qW,          bK  	  pp\        R5R,\        V4      VR6,          4       \        P                  ! \         Uu/ uF  qW,          bK  	  up4      P                  R74      p\         P"                  ! V4      P%                  4       VR6,          8X  d   \        R8R,4       R1# R1# u upi   \         d:   p	R-T R.2\        T	4      9  d   \        R/R,T R0T	 24        R1p	?	EK   R1p	?	EK  R1p	?	ii ; iu upi u upi ):r   zBL-007r   c                ^    V R ,          R,          R,          ^ ,          P                  RR7      # )r    r@   r5   1)r   updater
  s   &r   <lambda>%negative_self_tests.<locals>.<lambda>   s'    *g0F{0STU0V0]0]ps0]0tr   r   c                P    V R ,          ^ ,          R,          P                  RR7      # )r   r   failed)r   r!  r#  s   &r   r$  r%     s     ak!n_6U6\6\jr6\6sr   c                6    V R ,          P                  RRR7      # )r    rh   r   )r   r   r!  r#  s   &r   r$  r%     s    a
m6J6JS]ev6J6wr   r   c                P    V R ,          ^ ,          R,          P                  RR7      # )r   r   zowner.other)r   r!  r#  s   &r   r$  r%     s     Qx[^O5T5[5[dq5[5rr   r   c                B    V R ,          ^ ,          P                  RR7      # )r   F)r   r!  r#  s   &r   r$  r%     s    (A0E0EX]0E0^r   zBL-010r   c                B    V R ,          P                  RRRRRR/.R7      # )r=   rL   zpurchase.p1r   600r   r   )r:   r!  r#  s   &r   r$  r%     sG    !I,2E2EUabo  qV  W\  ]n  or  Us  Tt2E  3ur   r   c                B    V R ,          ^ ,          P                  RR7      # )r   1501)r   r!  r#  s   &r   r$  r%     s    1X;q>3H3Hms3H3tr   zBL-018r   c                B    V R ,          ^ ,          P                  RR7      # )r   3rT   r!  r#  s   &r   r$  r%     s    ak!n6K6KRU6K6Vr   zBL-020r   c                6    V R ,          P                  RRR7      # )r    rr   )r   r   r!  r#  s   &r   r$  r%     s    :9M9MV`oy9M9zr   zBL-021c                P    V R ,          R,          ^ ,          P                  RR7      # )r=   rV   zoperator.untrusted)rX   r!  r#  s   &r   r$  r%     s*    9F^9_`a9b9i9i  vJ9i  :Kr   zBL-023c                P    V R ,          R,          ^ ,          P                  RR7      # )r=   rV   500)rd   r!  r#  s   &r   r$  r%     s#    9F^9_`a9b9i9ity9i9zr   zBL-024c                    V R ,          ^ ,          P                  RR7      V R ,          ^ ,          P                  \        V R ,          ^ ,          4      R7      3# )r   r   r1  )rE   )r"  r3   r#  s   &r   r$  r%     sq    !H+a.:O:OVY:O:Z\]^f\ghi\j\q\q  N  OP  QY  OZ  [\  O]  ^\q  ]_  :`r   zBL-025c                4    V R ,          P                  RR7      # )r    rp   )r   r!  r#  s   &r   r$  r%     s    :9M9M[r9M9sr   zBL-001r   c                P    V R ,          R,          ^ ,          P                  RR7      # )r=   r   199)r   r!  r#  s   &r   r$  r%     s"    1Y<;XYZ;[;b;bot;b;ur   zBL-017c                6    V R ,          P                  RRR7      # )r=   200)r   r   r!  r#  s   &r   r$  r%     s    1Y<;N;N\aot;N;ur   c                P    V R ,          R,          ^ ,          P                  RR7      # )r=   r   2)r_   r!  r#  s   &r   r$  r%     s)    1Y<;XYZ;[;b;b  B;b  <Cr   zBL-022r   c                B    V R ,          R,          P                  RR7      # )r    r   z	request.b)r   r!  r#  s   &r   r$  r%     s    :x1H1O1O_j1O1kr   r   c                b    V R ,          R,          R,          ^,          P                  RRRR7      # )r    r   r   z
cycle.racezjob.racezledger.racer   r!  r#  s   &r   r$  r%     s9    *h8OP^8_`a8b8i8ir~  FP  [h8i  9ir   r   c                ^    V R ,          R,          R,          ^,          P                  RR7      # )r    r   r   z	request.a)r   r!  r#  s   &r   r$  r%     s'    a
mH.En.UVW.X._._mx._.yr   zself-test-did-not-fireSELFTEST[r   zself-test-wrong-rulez: NevidenceMetadatazformat-self-test-did-not-firer   zcanonical-order-invariancerE   r&   z canonical-serialization-distinct))
observedAtz
not-a-date)	sourceUriz	not a uri)
ownerEmailznot-an-email)traceIdz
not-a-uuid)r;   r<   r  r   r   r   listiter_errorsreversedtupler!   r3   r)   r*   r+   r.   r,   r-   r/   )cases	validatorr
  byprobescase_idr   mutatespecimenr   field	malformedrN   r1   reversed_eventdefaults   &&              r   negative_self_testsrW     s   "'	(%QH+q.%B	($&tu*,st*,wx)+rs$&^_&  )u  v')tu*,VW-/z{-  0K  L-/z{-  0`  a-/st/1uv/1uv/  2C  D%'kl,  /i  j"$yz'F* "(vr{+VH-=) +Jt< "( KuQx((3E*Fu*MI))(344d;Z[efk6l K X,x
 
#E(0u(>?(>1ehJ(>N?-j9XY^_lYmnJJ,DE,Dq%(
,DEFMMgVG~~g((*E-,@@$GijtBu@O 
)2  	a4&{#a&($/EjTXSYY[\][^Q_*`*`(	a @Es)   H %HIII	&II	c            
     L    ^ RI Hp Hp  \        P                  ! \        R,          P                  4       4      p\        P                  ! \        R,          P                  4       4      pT P                  T4       T ! Y!! 4       R7      p\        T4       Fq  w  rV\        TP                  T4      R R7      pT'       d=   \        R	TP!                  R
\#        T4      4      RP%                  R T 4       4      4       \'        T4       Ks  	  \)        Y44       \	        R\1        T4       R24       ^ #   \         d     \	        R\
        P                  R7        ^# i ; i  \*        \        P,                  \.        3 d*   p\	        RT 2\
        P                  R7        Rp?^# Rp?ii ; i)    )Draft202012ValidatorFormatCheckerz'BLOCKED: jsonschema dependency required)filezcase.schema.jsonz
cases.json)format_checkerc                ,    \        V P                  4      # r   )rH  absolute_path)r   s   &r   r$  main.<locals>.<lambda>!  s    Q__8Mr   )r   schemar   z; c              3  8   "   T F  qP                   x  K  	  R # 5ir   )messager   s   & r   r   main.<locals>.<genexpr>"  s     E`Y_TUiiY_r   zFAILED: NzQPASS: Draft 2020-12 + FormatChecker + semantic invariants + negative self-tests (z cases))
jsonschemarZ  r[  ImportErrorprintsysstderrr)   loadsROOT	read_textcheck_schema	enumeratesortedrI  r   rs   r   joinr  rW  OSErrorJSONDecodeErrorr   r   )	rZ  r[  ra  rL  vir
  errorsr   s	            r   mainrv    sD   SB8zz4 22==?@jj$|+6689))&1
v]_
EU#CA!--*/MNFtHQUU8CF%;DIIE`Y_E`<`aq! $ 	E% 
]^abg^h]iip
qr  S7SZZHQRS D((4 8n#**-a8s)   D- DE -&EE F#:FF#__main__)r   )r   r   rT   rY   r`   auditRecordIdrU   rW   r[   r_   rc   )__doc__
__future__r   r;   r,   r)   rh  pathlibr   __file__resolveparentrk  r   r   r!   r+   r3   r>   rB   rR   ry   r   r  rW  rv  __name__
SystemExitr   r   r   <module>r     s    C "   H~&&L/B
 Y A
@M
]("$&R;j(vV( Zz$&11r   